2010-07-09 113 views
5

在试图找出UIWebView的滚动位置时,我在HTML中附加了一个监听器,该监听器将回调主应用程序。附上我的JavaScript监听器,如:单次触摸平移后触发的onscroll事件不会在iPad上触发?

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

此事件似乎只在对OS 3.2(iPad的)轻弹滚动结束时被触发,一旦减速已经结束。然而,这个:http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html#//apple_ref/doc/uid/TP40006511-SW7似乎表明它应该在单指平底的末端被触发。我真的需要知道这个锅的完成时间。非常感谢任何帮助,谢谢。

+0

它解决了这个问题吗? – galambalazs 2010-07-12 10:32:59

+0

不,如果我的下面的评论不明确 - 对此没有实质影响。 – 2010-07-12 20:33:38

回答

3

根据QuirksMode Safari浏览器iPhone不会对windowonscroll事件,而是对document(以及任何其他元素)。我敢打赌Safari iPad会做同样的事情。

+0

我试着将函数附加到document.onscroll,它似乎有相同的结果:在滑动滚动的减速结束时触发事件,但在单指平移后没有事件。 (还是)感谢你的建议。 – 2010-07-12 19:20:19

1

我在iPhone中遇到同样的问题:正确地滑动滚动会产生onscroll事件,但是单指平移不会(我在固定菜单实现中使用了这个,菜单在ontouchstart事件后隐藏,在onscroll之后)。

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

我还没有在iPad上测试过,我想知道这个修补程序是否也有帮助。

0

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

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

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

注:touchend事件将对于被抬离屏幕的每个手指被解雇。