问题:使用js制作一个可以根据鼠标拖动的盒子
分析:
- 这个盒子需要是绝对定位,可以改变left和top值
- 需要鼠标按下触发事件,移动触发事件,鼠标松开触发事件
- 按下时可以执行移动的事件,松开时不执行移动事件
小知识
e.clientX //获取横坐标,值是数字e.clientY //获取纵坐标,值是数字xxx.style.left //这是id为xxx的盒子的left值,值带有 pxparseInt(xxx.style.left)可以获取纯数字
完整代码
html
<div id="xxx"></div>
css
#xxx{border:1px solid red;height: 100px;width: 100px;position:absolute;left: 0;top: 0;}
js代码
var dragging=falsevar position = nullxxx.addEventListener('mousedown',function(e){dragging=true//获取初始位置position = [e.clientX,e.clientY]});document.addEventListener('mousemove',function(e){//如果按下了鼠标则开始执行移动if(dragging){var x =e.clientX;var y = e.clientY;var deltaX = x-position[0];var deltaY = y-position[1];//有可能left值为null,parseInt是为了获取纯数字var left = parseInt(xxx.style.left || 0);var top = parseInt(xxx.style.top || 0)//初始位置+移动距离+'px'xxx.style.left=left + deltaX+"px";xxx.style.top=top + deltaY+"px";//将移动后的位置设置为初始位置position=[x,y]}})document.addEventListener('mouseup',function(e){//松开鼠标后不再执行移动事件dragging=false})
使用document是为了防止鼠标移动过快而盒子跟不上
