我自己做过很多拖动相关的功能,虽然有 drag 相关的 api,但是自定义和兼容性问题,我还是喜欢自己写,下面我按照我的思路给你说一下: 1. 在 div1 上添加 mousedown 事件监听 2. 在 mousedown 监听的函数里,立即给 document 怎加一个 mousemove 的监听,因为实际上在拖动的时候只有 document 可以感知到鼠标在上边动,当然加到 body 上也可以,但是会有一些小问题,推荐还是放在 document 上,同时还要在 document 上增加一个 mouseup 的事件,这样就可以监听到鼠标放开的事件,要注意的是,在触发 mouseup时要把 mousemove 给去掉 3. 在 document 的 mousemove 监听事件里,就可以记录鼠标移动到哪了,一般如果要做一个拖动的动画,比如克隆一个你鼠标点下的那个元素的内容,可以在上一步的时候创建一个 position 是 fixed 的元素,让后让它的起始坐标就在鼠标点击的地方,至于这个元素的样式,就可以随便发挥了,可以随便自定义 4. 至于你问题中提到的问题,很好解决,可以在第二步在 mousedown 监听的函数里,立即给 div2 增加一个 mouseenter 事件和 mouserleave 事件,这样就可以感知到鼠标拖着 div1 到 div2 上了,当然如果你不需要监听鼠标在 document 上移动到什么位置,你可以不添加 document 的 mousemove 监听
我自己做过很多拖动相关的功能,虽然有 drag 相关的 api,但是自定义和兼容性问题,我还是喜欢自己写,下面我按照我的思路给你说一下: