javascript - draggable without jQuery ui -
how make element draggable without using jquery ui?
i have code:
<script type="text/javascript"> function show_coords(event) { var x=event.clientx; var y=event.clienty; var drag=document.getelementbyid('drag'); drag.style.left=x; drag.style.top=y } </script> <body style="height:100%;width:100%" onmousemove="show_coords(event)"> <p id="drag" style="position:absolute">drag me</p> </body>
the problem want drag while user pressing mouse button. tried onmousedown
results negative.
it quite easy concept.
function enabledragging(ele) { var dragging = dragging || false, //setup bunch of variables x, y, ox, oy, enabledragging.z = enabledragging.z || 1, current; ele.onmousedown = function(ev) { //when mouse down current = ev.target; dragging = true; //it dragging time x = ev.clientx; //get mouse x , y , store y = ev.clienty; // later use. ox = current.offsetleft; //get element's position oy = current.offsettop; current.style.zindex = ++enabledragging.z; //z-index thing window.onmousemove = function(ev) { if (dragging == true) { //when dragging var sx = ev.clientx - x + ox, //add difference between sy = ev.clienty - y + oy; // 2 mouse position current.style.top = sy + "px"; // element. current.style.left = sx + "px"; return false; //don't care this. } }; window.onmouseup = function(ev) { dragging && (dragging = false); //mouse up, dragging done! } }; } enabledragging(document.getelementbyid("drag")); //draggable now! var ele = document.getelementsbytagname("div"); for(var = 0; < ele.length; i++){ //every div's draggable enabledragging(ele[i]); // (only when "position" } // set "absolute" or // "relative")
http://jsfiddle.net/derekl/nwu9g/
the reason why code not working because <div>
follow cursor goes, , not dragging it. top left corner follow cursor, , not wanted.
update
now if want grabber or similar, change part of script:
ele.onmousedown = function(ev) { current = ev.target;
to
var grabber = document.createelement("div"); grabber.setattribute("class", "grabber"); ele.appendchild(grabber); grabber.onmousedown = function(ev) { current = ev.target.parentnode;
now can click on grabber start dragging process.
Comments
Post a Comment