目前,我正在尝试为应该可以在一定范围内拖动的 HTML 元素实现触摸支持。它可以在使用 touchmove 的 Android 和 iOS 平板电脑上运行,但还不能在 Windows 平板电脑上的 IE 10 上运行。我设法捕获了 MSPointerMove 事件,我认为它应该具有 pageX 和 pageY 属性,但是当我console.log
得到这些时,我得到了undefined
. 使用手势事件不是一种选择,因为我需要知道它在轴上拖了多远。
那么,我应该寻找哪些属性?
目前,我正在尝试为应该可以在一定范围内拖动的 HTML 元素实现触摸支持。它可以在使用 touchmove 的 Android 和 iOS 平板电脑上运行,但还不能在 Windows 平板电脑上的 IE 10 上运行。我设法捕获了 MSPointerMove 事件,我认为它应该具有 pageX 和 pageY 属性,但是当我console.log
得到这些时,我得到了undefined
. 使用手势事件不是一种选择,因为我需要知道它在轴上拖了多远。
那么,我应该寻找哪些属性?
我不确定 HTML 页面是如何显示的,但是把style="-ms-touch-action: none"
. 这可能是因为 mousemove 事件的默认设置是拖动屏幕,而不是注册移动鼠标。
不幸的是,我的问题似乎没有包含足够的细节来包含实际问题——我可以测试的平板电脑无法访问互联网,所以我无法提供 JSFiddle 来演示这个问题。
所以问题是我正在使用 Angular,它使用 jQuery 的一种形式来包装事件。通常,这很棒:jQuery 无需检测当前浏览器关于事件对象的特定实现细节,而是设置包装事件对象本身的pageX
和pageY
属性,以便您始终可以自信地访问这些属性。
但是:jQuery,至少在我使用的版本(1.10.2)中,还不知道如何处理MSPointer
事件(或pointer
事件,在 IE11 中使用,就此而言)。因此,虽然我有一个包装事件对象,但没有pageX
和pageY
属性。
解决方法是访问event.originalEvent
,即特定于浏览器的事件。由于该规范看起来只能由 IE 实现,因此假设该对象以 IE 构造它的方式构造并直接访问其上的pageX
andpageY
属性应该是相对安全的。