【发布时间】:2020-04-18 22:12:23
【问题描述】:
我正在执行 JavaScript onScroll。
我的代码适用于任何普通的计算机鼠标,但是当我使用笔记本的触摸板时,我遇到了以下情况:
- 我的鼠标在手指移动滚轮时触发(大约 1 到 8 个)
mousewheel事件。 - 我的触摸板在两根手指触摸触摸板时会触发更多 (~60)
mousewheel事件并在我的手指再次悬空后继续触发。
我从移动触控设备中了解到这种行为。该功能称为“Predictive Touch” - 如果您的手指移动在抬起之前有足够的加速度,则滚动会继续。
我认为触摸板驱动程序正在设置这种“平滑滚动”行为。
为了调试这个案例,我使用了以下代码:
/* Handle Mouse-Wheel Scrolling */
var lastChange = +new Date();
$(window).bind('mousewheel', function(e){
console.log("mw");
if(+new Date() - lastChange > 1000){
console.log("mw allowed");
if(e.originalEvent.wheelDelta > 0) {/*go to previous*/}
else{ /*go to next*/}
lastChange = +new Date();
}
return false;});
这是一个简单的代码,每秒“允许”一个鼠标滚动事件。
如果我进行快速触摸板滚动,mousewheel 事件将被触发约 300 次。一秒条件是让 3 个事件发生。我的手指在触摸板上的时间还不到一秒钟。
通过这个测试,我发现mousewheel 事件仍然被触发(几乎持续 3 秒),即使我的手指已经离开触摸板。
是否有 Javascript 函数或解决方法/技巧/黑客来避免这种行为?
类似于触摸板的onTouchEnd 事件,也许吧?
【问题讨论】:
标签: javascript jquery touch jquery-events mousewheel