准确捕捉移动设备上的“scrollend”事件

时间:2016-02-09 18:25:22

标签: javascript jquery ios cordova hammer.js

在移动元素上使用-webkit-overflow-scrolling: touch;样式时,捕获scroll事件可能非常令人厌烦,因为它们是通过“轻拂”,“平移”以及滚动本身停止时触发的。 p>

与桌面浏览器不同,这使得尝试检测当前正在滚动元素,或元素是否已完成滚动是一件噩梦。

我已经对SO和网络进行了大量的研究并确定了唯一可行的解​​决方案(我能想到的)是创建一个捕获滚动的第一次触摸的函数,忽略任何后续的{{ 1}}然后捕获最终的滚动事件。

如果这可以以某种方式完成,那么只要它是偶数,递增的值就可以代表pan ...

我已经写了以下内容,但我已经省略了scrollend个事件,因为我不知道从这个部分开始:

touch

然后,对于任何其他事件,你可以做

var checklist_scroll = 0; // Whenever this value is even, it means the scroll has ended
$('ul').on('scroll',function(){
    checklist_scroll++; // Only do this for 'scrollstart' and 'scrollend', NOT when panning through the list
});

1 个答案:

答案 0 :(得分:2)

您可以使用jquery-scrollstop插件在功能上添加滚动开始/停止检测。

见这个例子:

var scrolling = false;
$('#some_element').on('scrollstart',function(){
    scrolling = true;
});
$('#some_element').on('scrollstop',function(){
    scrolling = false;
});

$('#some_tappable_element').hammer().on('tap pressup',function(){
    // Use a timeout to ensure the scrolling var has been updated
    setTimeout(function(){
        if(!scrolling){
            // Select the element
        }
    },10);
});