单点触控后没有在iPad上触发onscroll事件?

时间:2010-07-09 21:48:19

标签: javascript ipad uiwebview webkit

在试图找出UIWebView的滚动位置时,我在HTML中附加了一个监听器,它将回调主应用程序。我附加了javascript监听器,如:

window.onscroll = function reportScroll() {
    var sY = window.pageYOffset;
    alert('Scroll pos: '+sY);  // Would evetually trigger a URL or something
}

一旦减速结束,此事件似乎仅在OS 3.2(iPad)上的轻弹滚动结束时触发。但是这个:https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7似乎表明它应该在单个手指平底锅的末尾触发。我真的需要知道那个锅何时完成。

3 个答案:

答案 0 :(得分:3)

根据QuirksMode Safari,iPhone不会在onscroll上触发window事件,而是在document(和任何其他元素)上触发。我敢打赌Safari iPad会做同样的事情。

答案 1 :(得分:1)

我在iPhone中也遇到了同样的问题:轻弹滚动正确产生onscroll事件,但单指平移没有(我在我的固定菜单实现中使用它,其中菜单在ontouchstart事件后隐藏,并在之后恢复onscroll)。

我通过使用两个并行事件解决了这个问题:onscroll和ontouchend。它们现在都引用相同的事件处理程序(恢复菜单)。由于在滚动期间抑制了事件,因此如果窗口继续轻弹滚动,则不会触发ontouchend事件。现在,事件处理适用于轻拂滚动和平移。

我没有在iPad上测试过这个,我很想知道这个修复是否也有帮助。

答案 2 :(得分:0)

在iOS Safari中,onscroll事件应仅在滚动结束时(减速后)触发一次。如果您只是将手指从屏幕上移开,请将其视为即时减速。因此,如果您正在执行“轻弹滚动”,则在减速结束时,onscroll事件仍然只会触发一次。

听起来你应该监控touchend事件:

$(window).on('touchend', function() {
     // Do something
});

注意:每次从屏幕上抬起的手指都会触发touchend事件。