取消IE9触摸滚动事件并调用鼠标移动(可能)

Cancel IE9 touch scroll event and invoke Mousemove, possible?

本文关键字:移动 鼠标 可能 调用 IE9 触摸 滚动 事件 取消      更新时间:2023-09-26

在带有IE9和多点触摸屏(如HP TouchSmart)的Windows 7计算机上,如果您触摸到的页面足够高,可以有滚动条并在页面滚动时上下移动手指。这似乎不会引发任何mousemove事件。如果您触摸屏幕并最初向左或向右移动,而不是向上和向下移动,则会触发mousemouse事件。

我不想取消这个滚动并导致浏览器调用一个正常的mousemove事件。这可能吗?

编辑:IE9中似乎没有触摸事件。IE9在Windows 7上支持触摸事件吗?

编辑2:关于这件事,还有其他几个有趣的地方。首先,当手势触发滚动时,浏览器通常会触发mousewheel事件,这通常会被捕获并取消。第二,在这种特殊的情况下,你可以用这个破解$(document).bind('mousedown mouseup click dblclick', function (e) { });来阻止IE9上的滚动,就像黑客有时做的那样,这对我来说没有任何意义——可能可以使用更少的事件绑定,但我没有很好的访问权限来轻松测试设备。

在花了一些时间测试各种抑制默认事件响应的方法之后,我不知道如何抑制滚动事件。但是,您应该能够从滚动事件处理程序中激发mousemove事件。

window.onscroll = function(e){
    element.onmousemove();
}
//jquery
$(window).scroll(function(e){ element.mousemove(); } );

一个原始的例子。

我想你可以尝试阻止自动滚动的两件事:将溢出(或overflow-y)设置为隐藏在你的身体元素上,或者作为你的onscroll处理程序的一部分,试图滚动回你的原点。将body的溢出设置为隐藏将阻止滚动并隐藏滚动条,但我不确定这是否是您想要的。

尝试触摸事件而不是鼠标事件。

我在iPad上也遇到了同样的问题。我不得不添加一个e.preventDefault();到touchmove事件。我只对跟踪交互的div执行了此操作,而不是对整个页面执行。

element.ontouchmove = function(e){ e.preventDefault(); };

不知道你的设备,但可能值得一试。