js 实现拖拽元素

js 实现拖拽元素,第1张

因为需要计算元素的位置变化,所以需要掌握几个关于位置的api

点击需要拖动元素时,获取该元素的初始位置。

鼠标移动期间 获取元素当前的位置信息

计算

进行事件监听

拖拽的实现原理:通过事件mousedown(事件的触发) →mousemove(事件的控制) →mouseup(事件的清除),拖拽的过程就是mousemove阶段;

问题产生的原因:因为mousemove 的间隔性触发,当两次mousemove事件触发的间隔中,鼠标移动距离出了element的范围,就会产生鼠标脱离element范围,拖拽就停止,

解决方法: 将mousemove事件挂在docment,而不是对应的element,此时鼠标滑动只要不出docment范围就不会触发上述情况。

拖动事件完成的动作时是:mousedown(事件的触发) →mousemove(事件的控制) →mouseup(事件的清除) 但是mouseup的时候 同时会触发 点击事件(如果元素上面有点击事件的话)

处理办法:记录mousedown(记录开始时间) →mousemove→mouseup(记录结束时间) 的时间 根据时间长短判断是进行了点击事件还是进行了拖拽事件。

正常需求的话 就希望拖拽元素只在屏幕的可视范围内进行拖拽,不能跑出去。

在onmousemove 中添加边缘控制就好,具体范围可以根据具体需求更改。

newDiv=createElement("div")//动态创建DIV

newDIV.width=600px

....//这里是div的属性定义

......

document.getElementsByTagName("body").appendChild(newDiv)//添加到body里

..

div的拖动通过绑定onmousedown 和onmousemove 和 onmouseup 事件,获取鼠标当前坐标,经过计算后设置DIV的posision就可以了

1、新建一个HTML文件,保存为test.html,用于编写代码实现拖放功能 。

2、在test.html添加一个div标签,并且给它一个id,用于下面编写样式。

3、通过div的id , 给div定义CSS样式,例如,把div定义为一个带边框的长方形。下面将实现将图片拖放在这个长方形中。

4、在div的下面定义一张被拖放图片,并设置该图片的属性为允许被拖放。

5、在被拖放的图片上加上一个ondragstart事件,即图片被拖动时触发这个事件。再给事件一个函数,用于拖动图片时,把图片保存在一个变量中。

6、运行代码,在浏览器中查看结果:至此,完成了使用JS实现拖放图片到div中的功能。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11387079.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存