拖拽的实现是通过给元素设置 position 为相对定位,而后在鼠标按下的时候记录下地位,而后监测文档内鼠标的挪动情况,来更改元素款式的 left 和 top值来实现了拖动的成果。大佬博客指路。代码如下:
<!DOCTYPE html><html lang="cn"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>拖拽</title></head><style> .container{ width: 100%; position: relative; height: 100%; } #drag{ width: 50px; height: 50px; background-color: red; position: absolute; cursor: move; }</style><body> <div class="container"> <div id="drag"></div> </div> <script> let drag = document.querySelector('#drag') drag.onmousedown = function(event){ //获取到事件对象 //从中能够获取到鼠标所在的地位,计算出dom元素的地位 console.log(event); var diffX = event.clientX - drag.offsetLeft; var diffY = event.clientY - drag.offsetTop; if(typeof drag.setCapture !== 'undefined'){ drag.setCapture(); } document.onmousemove = function(event){ var event = event || window.event; var moveX = event.clientX - diffX; var moveY = event.clientY - diffY; if(moveX < 0){ moveX = 0 }else if(moveX > window.innerWidth - drag.offsetWidth){ moveX = window.innerWidth - drag.offsetWidth } if(moveY < 0){ moveY = 0 }else if(moveY > window.innerHeight - drag.offsetHeight){ moveY = window.innerHeight - drag.offsetHeight } drag.style.left = moveX + 'px'; drag.style.top = moveY + 'px' } document.onmouseup = function(event){ this.onmousemove = null; this.onmouseup = null; //修复低版本ie bug if(typeof drag.releaseCapture!='undefined'){ drag.releaseCapture(); } } } </script></body></html>
另外博客还介绍了一种 H5 的拖拽,通过给元素设置属性 draggable="true" 来容许元素拖拽,而后监听元素的拖拽事件,来实现。