Javascript-拖拽效果的原理及实现
一、拖拽原理
假设浏览器上有一个元素(已经进行绝对定位了),起始位置为(mx,my),即距浏览器左方位置为mx px,距离浏览器上方位置为my px,
拖拽过程中就是改变left top值,假设鼠标点击元素,并设点击元素的点为(x,y),这个点肯定是在拖拽元素里面的,随着鼠标的移动可以
得到新的位置,把这个点设为(nx,ny),这时left值应该为nx-x+mx,top值为ny-y+my,下图所示:

二、用到的方法
1、mousemove (鼠标移动时)
2、mousedon (鼠标按下时)
3、mouseup (鼠标松开时)
对于元素的初始位置获取我们可以用element.offsetLeft和element.offTop来获取,
鼠标按下松开的位置我们可以用event.clinentX和event.clinentY来获取。
三、实现
下面我们来实现一下:
代码如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Document</title> 7 <style> 8 div{ 9 width:50px; 10 height: 50px; 11 background-color: red; 12 position: absolute; 13 } 14 </style> 15 </head> 16 <body> 17 18 <div></div> 19 20 <script> 21 22 var div=document.querySelector("div"); 23 // 按下时开始监听在文档中鼠标移动的事件 24 // 开始监听鼠标松开键的事件 25 // 只有按下时才准备拖拽 26 div.onmousedown=function(e1){ 27 // 当鼠标在文档移动时,不能再div上移动,因为鼠标可能离开div,造成无法拖拽 28 document.onmousemove=function(e){ 29 // 当鼠标移动时,将当前鼠标相对视口的坐标赋值给元素的left和top 30 // 因为我们需要在按下的位置拖拽,因此我们还需要获取按下键鼠标相对div的左上角位置 31 // 使用当前鼠标位置减去这个相对元素的左上角位置,保证鼠标所按位置拖拽 32 div.style.left=e.clientX-e1.offsetX+"px"; 33 div.style.top=e.clientY-e1.offsetY+"px"; 34 } 35 // 当释放鼠标键时,删除鼠标移动事件和删除鼠标释放事件 36 document.onmouseup=function(){ 37 document.onmousemove=null; 38 document.onmouseup=null; 39 } 40 } 41 </script> 42 43 </body> 44 </html>

浙公网安备 33010602011771号