用 JavaScript 实现拖动遇到一个事件相关的问题

2016-05-30 16:55:24 +08:00
 isbase

如图左右两边容器 ID 为 left 和 right

1.当按下鼠标左键开始拖动 right 容器里的 2 号标签到 left 容器,光标进入 left 容器后释放鼠标左键,这时候 drop 事件的响应函数里 e.target 值为 2 号标签.

2.反之,拖动一号标签到 right 容器,当光标进入 right 容器后释放鼠标左键,这时候 drop 事件的响应函数里的 e.target 值为 right 容器

问题来了,当触发 drop 事件时光标是在那两个拖动的标签上,所以我的理解是 e.target 应该是那两个拖动的标签,为什么会出现 e.target 值为 right 容器这种情况呢

附上 CodePend 地址
http://codepen.io/isbase/pen/MeWqww

在 codepen 实例和 GIF 中还可以看到在拖动标签时 console 里 allowdrop=true 的时候,我将正在拖动标签的 cursor 指定为 copy,但是只有我说的第一种情况达到了目的,第二张情况虽然 console 里显示拖动标签的 cursor 值为 copy,但是实际上光标已经变成默认的箭头了.
1771 次点击
所在节点    JavaScript
5 条回复
jerray
2016-05-30 17:28:31 +08:00
LZ 这里用的是 mouseup 事件,建议看下文档:

https://developer.mozilla.org/en-US/docs/Web/Events/mouseup

mouseup 事件的 target 是当前 DOM 最顶部的元素。试着给你拖拽的元素加了个 z-index ,每次释放的时候 target 就是拖拽的元素了。
isbase
2016-05-30 20:24:14 +08:00
@jerray

Thanks

问题解决了,我再去仔细研究一下原理
rekulas
2016-05-31 09:54:32 +08:00
演示动态图什么工具生成的?
isbase
2016-05-31 15:33:52 +08:00
@rekulas LICEcap
rekulas
2016-05-31 15:52:16 +08:00
@isbase thanx 很不错的小工具

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/282269

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX