Cha*_*lie 8 javascript jquery mobile-safari touch-event dom-events
是否有可能通过Javascript检测元素是否已停止在Mobile Safari中滚动?
我有一个通过使用动量滚动的元素,-webkit-overflow-scrolling:touch我需要检测元素是否已经停止滚动,包括在动量影响滚动之后.
这可能吗?onscroll在我的应用程序中使用该事件不起作用.
您可以计算滑动速度并尝试根据某个阈值确定是否会发生动量滚动.我做了一些测试,大约0.25像素/ ms似乎是一个很好的价值.
注意:有时动量滚动也会出现较低的速度.导致动量滚动的最低速度是我记录的0.13(非常短的增量时间)所以如果你需要一个100%完美的解决方案,继续寻找.
示例代码还检测并处理过度滚动.
使用JQuery;
var scrollWrapper = $('#myWrapper');
var starTime, startScroll, waitForScrollEvent;
scrollWrapper.bind('touchstart', function() {
waitForScrollEvent = false;
});
scrollWrapper.bind('touchmove', function() {
startTime = new Date().getTime(); startScroll = scrollWrapper.scrollTop();
});
scrollWrapper.bind('touchend', function() {
var deltaTime = new Date().getTime() - startTime;
var deltaScroll = Math.abs(startScroll - scrollWrapper.scrollTop());
if (deltaScroll/deltaTime>0.25
|| scrollWrapper.scrollTop()<0
|| scrollWrapper.scrollTop()>scrollWrapper.height()) {
// will cause momentum scroll, wait for 'scroll' event
waitForScrollEvent = true;
}
else {
onScrollCompleted(); // assume no momentum scroll was initiated
}
startTime = 0;
});
scrollWrapper.bind('scroll', function() {
if (waitForScrollEvent) {
onScrollCompleted();
}
});
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这完美地工作:
var timer;
$(scrollWrapper).on('scroll',function(e){
if(timer){
clearTimeout(timer);
}
timer = setTimeout(function(){
$(this).trigger('scrollFinished');
}, 55)
})
$(scrollWrapper).on('scrollFinished',function(){
// will be called when momentum scroll is finished
})
Run Code Online (Sandbox Code Playgroud)
滚动停止时发布'scrollfinished'事件.
| 归档时间: |
|
| 查看次数: |
3692 次 |
| 最近记录: |