I want to create a movable/draggable div in native javascript without using jquery and libraries. Is there a tutorial or anythign?
I want to create a movable/draggable div in native javascript without using jquery and
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
OK, here’s my personal code that I use for lightweight deployments (projects where using a library is either not allowed or overkill for some reason). First thing first, I always use this convenience function so that I can pass either an id or the actual dom element:
As a bonus,
get()is shorter to type thandocument.getElementById()and my code ends up shorter.Second realize that what most libraries are doing is cross-browser compatibility. If all browsers behave the same the code is fairly trivial. So lets write some cross-browser functions to get mouse position:
OK, the two functions above are identical. There’re certainly better ways to write them but I’m keeping it (relatively) simple for now.
Now we can write the drag and drop code. The thing I like about this code is that everything’s captured in a single closure so there are no global variables or helper functions littering the browser. Also, the code separates the drag handle from the object being dragged. This is useful for creating dialog boxes etc. But if not needed, you can always assign them the same object. Anyway, here’s the code:
There is a reason for the slightly convoluted
offsetX/offsetYcalculations. If you notice, it’s just taking the difference between mouse positions and adding them back to the position of the div being dragged. Why not just use the mouse positions? Well, if you do that the div will jump to the mouse pointer when you click on it. Which is a behavior I did not want.