在试图找出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似乎表明它应该在单个手指平底锅的末尾触发。我真的需要知道那个锅何时完成。
答案 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事件。