2

是否有 js 方法来检测长 iOS safari 页面上的垂直轻弹何时停止移动,例如等效于伪:

window.element.momentumScroll == false

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

感激地收到任何和所有的线索。

附录我没有在我的代码中实现任何外部库(没有 jQuery 等),需要找到一个本地 js 侦听器/方法来告诉我轻弹滚动何时结束。

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

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

3 回答 3

2

方法:

startTop = window.pageYOffset on touchStart

currTop = window.pageYOffset on touchEnd
deltaTop = startTop - currTop
deltaTop == 0 means no momentum scrolling occurred during another event.
于 2012-05-14T15:31:05.703 回答
1

我不确定我是否正确理解了这个问题。我相信您正在尝试实现诸如在页面到达底部时加载新内容之类的目标?(请原谅我假设)

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

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

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

在其他框架中也应该有平等的实施。(jQuery:http: //jgestures.codeplex.com/

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

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

于 2012-05-13T16:15:57.440 回答
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 就会触发该事件。计时器似乎没有暂停。

于 2019-11-06T17:34:47.597 回答