移动Safari垂直滚动 - 如何检测窗口何时停止在Javascript中移动

时间:2012-05-13 15:51:54

标签: javascript ios scroll detect

是否有一种js方法可以检测长iOS浏览器页面上的垂直轻弹何时停止移动,例如等效于伪:

window.element.momentumScroll == false

这是为了检测减速内容是否仍在移动或滚动事件是否已完成。

感激地收到任何线索。

ADDENDUM我没有在我的代码中实现任何外部库(没有jQuery等),并且需要找到一个原生的js监听器/方法来告诉我什么时候轻弹滚动结束。

doc.addeventlistener("scroll", function(e){setvariable to 1}, false)

doc.addeventlistener("noscroll", function(e){setvariable to 0}, false)

3 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了这个问题。我相信你正试图在页面到达底部时加载新内容? (原谅我假设)

如果您的活动基于触摸,我认为您正在寻找一些javascript手势库。

这上面有Mootools库 Powertools:http://cpojer.net/PowerTools/#

Drag.Flick:http://mootools.net/forge/p/drag_flick

在其他框架中也应该有相同的实现。 (jQuery:http://jgestures.codeplex.com/

可能的解决方案是查找可以返回超出document.body.clientHeight的触摸当前位置的事件(读取:不跨平台)。

希望我能指出正确的方法。

答案 1 :(得分:1)

方法:

startTop = window.pageYOffset on touchStart

currTop = window.pageYOffset on touchEnd
deltaTop = startTop - currTop
deltaTop == 0 means no momentum scrolling occurred during another event.

答案 2 :(得分:0)

只需在touchend事件中执行setTimeout。触摸端停止工作后,将触发超时。在触摸事件期间,计时器会暂停。在ios上,一旦页面停止滚动并且不再有动量,就会触发超时。

body.addeventlistener("ontouchend", function(e){
    setTimeout(function(){
       alert("done moving")
    },0); 
}, false);

$('body').on('touchend.scroll', function () { 
    setTimeout(function(){
       alert("done moving")
    },0); 
});

请注意,只要您放开手指,Android就会立即触发该事件。计时器似乎没有被暂停。