为什么不使用mouseup event target而不是"old school"drag-n-drop的位置呢?

aep*_*eus 7 javascript internet-explorer drag-and-drop

因此,从我所看到的几乎所有与IE兼容的拖放操作中,使用定位来确定丢弃的位置.做像mousedown这样的事情,确定所有可放置的位置,mouseup确定我们是否处于可放置的位置.为什么?我做了一个快速原型,它似乎工作,它使用mouseup上的event.target(在jquery中,所以无论转换到其他地方)确定drop元素.

有没有令人信服的理由不这样做?(在mouseup上使用e.target).因此,mousedown确定被拖动的内容,mouseup确定放置的位置.添加一些变量以确保我们正在拖动,并记住拖动的内容.

Fla*_*ino 3

我的猜测:因为e.targetmouseup 可以引用您正在拖动的元素(或其拖动幽灵)。如果您拖动一个元素,并且它(或半透明的幽灵元素)跟随您的光标,就像在桌面上拖动文件时一样,那么当您松开鼠标时,您的鼠标将始终位于您正在拖动的元素上方。


或者,如果没有光标跟随,也没有重影,e.target则可能引用“dropzone 元素”内的元素,而不是 dropzone 本身。

例如:

<div id="dropzone_element">
    <div id="previously_dropped_element" />
<div>

<div id="draggable_element" />
Run Code Online (Sandbox Code Playgroud)

因此,如果将可拖动元素拖动到 dropzone 元素上并释放鼠标,则实际上是在 dropzone 内先前放置的元素上释放鼠标;不是拖放区本身。

在这两种情况下,检查鼠标位置是获取正确拖放区元素的唯一方法。

这些是我的猜测,但我没有 IE 来检查实际行为。


编辑:在第一种情况下,位置检查是唯一的方法。在第二种情况下,您还可以检查目标的祖先以查找 dropzone 元素,如 aephus 在评论中指出的那样。也就是说,如果之前删除的元素实际上已插入到 dropzone 的层次结构中,而不仅仅是被定位为看起来像这样 - 尽管这将是一件非常奇怪的事情:)