移动版Safari中惯性滚动事件

7
我目前在iPad上优化的网页中使用overflow:scroll,效果棒极了。但是我发现滚动区域中的项目触摸事件存在问题,因为它将滑动操作解释为触摸操作。由于没有滚动完成事件,并且每次滚动时都会触发滚动事件,我尝试检测滚动事件并设置计时器来暂时禁用触摸事件。然而,我发现滚动事件仅在用户启动滚动时才会触发,而惯性滚动时很少。
是否有不断触发滚动事件或其他方式来检测当前是否正在发生滚动的方法?
这只是Mobile Safari中惯性滚动的问题,因为在OS X上移动鼠标会自动停止惯性滚动,所以要启动点击事件,通常需要移动鼠标,从而避免冲突。您还没有触摸用于滚动和触摸用于点击的双重输入。
1个回答

3
<script type="text/javascript">
<!--
    document.addEventListener("touchmove", ScrollStart, false);
    document.addEventListener("scroll", Scroll, false);
    function ScrollStart() {
        //start of scroll event for iOS
    }
    function Scroll() {
        //end of scroll event for iOS
        //and
        //start/end of scroll event for other browsers
    }   
// -->
</script>

4
我认为他指的是动量滚动期,它不由“touchmove”或“scroll”事件处理。 - zanona
1
刚刚花了一天时间在iOS7上验证了一下,使用overflow:scroll设置div时,Safari会在两种情况下触发滚动事件:1)用户触摸并移动手指以开始滚动 - 在这种情况下,滚动事件似乎与touchmove事件一样频繁地触发 2)用户已经启动了“轻扫”样式的滚动 - Safari只有在滚动停止(包括底部反弹)后才会触发滚动事件。 - Alamgir Mand
由于我还研究了Android 4.4上的Chrome - Chrome实际上会在滚动发生时(即使有惯性)触发滚动事件,并在滚动开始时触发单个touchmove事件。然而,Safari会在手指按下并且div被滚动时同时触发滚动和touchmove事件。 - Alamgir Mand
有人想出如何考虑滚动的动量了吗?如果我使用上面的代码,即使滚动正在减速并且尚未完全停止,滚动的结束事件也会触发。 - Hetal Vora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接