【发布时间】:2011-04-24 13:08:22
【问题描述】:
=我正在尝试在我的 Web 应用程序中开发一个简单的拖放 UI。可以通过鼠标或手指拖动项目,然后可以将其拖放到多个放置区域之一。当一个项目被拖过一个放置区域(但尚未释放)时,该区域会突出显示,标记安全着陆位置。这对鼠标事件非常有效,但我被 iPhone/iPad 上的 touchstart/touchmove/touchend 系列卡住了。
问题在于,当调用项目的 ontouchmove 事件处理程序时,其event.touches[0].target 始终指向原始 HTML 元素(项目),而不是当前手指下的元素。此外,当一个项目被手指拖过某个放置区域时,该放置区域自己的touchmove 处理程序根本不会被调用。这实质上意味着我无法确定手指何时位于任何拖放区上方,因此无法根据需要突出显示它们。同时,当使用鼠标时,mousedown 会针对光标下的所有 HTML 元素正确触发。
有些人确认它应该这样工作,例如http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/: 对于那些来自普通网页设计世界的人来说,在普通的 mousemove 事件中,在 target 属性中传递的节点通常是鼠标当前所在的位置。但在所有 iPhone 触摸事件中,目标都是对原始节点的引用。
问题:有没有办法确定手指下的实际元素(不是最初触摸的元素,在许多情况下可能不同)?
【问题讨论】:
-
2017 年 12 月,最新的 Chrome,仍在进行中:-(
标签: javascript dom-events