我需要将一个元素的滚动偏移量与另一个元素(实际上是窗口)保持同步,但在移动Safari(iPad)上惯性“滚动停止”阶段时,我遇到了麻烦。
我有几个带有
但是,在iPad上测试接口时,我注意到在触摸阶段(当您用手指拖动虚拟页面时)和惯性阶段(当您松开并且页面减速停止时),div都没有被更新。我通过注册
如果我能在那个阶段进行轮询,就可以在两个元素之间保持一定的同步。我已经尝试过使用setTimeout、setInterval和requestAnimationFrame,但它们都不会在惯性滚动阶段触发。似乎在这个阶段所有的Javascript都停止了。
问题:
- 在惯性滚动阶段是否有任何触摸或滚动事件被触发? - 是否有任何方法在那个阶段运行Javascript回调函数? - 是否有一种方式可以使用CSS或其他技术(而非JS)来同步两个元素的滚动偏移量(只限于X或Y轴)?
我有几个带有
position:fixed; overflow:hidden
的div,并且我需要将它们的滚动偏移量与窗口的滚动偏移量保持同步(即整个body滚动)。通常我会这样编码(使用jQuery):var $win = $(window),
$div1 = $(...)
$win.scroll(function() {
$div1.scrollTop($win.scrollTop())
})
但是,在iPad上测试接口时,我注意到在触摸阶段(当您用手指拖动虚拟页面时)和惯性阶段(当您松开并且页面减速停止时),div都没有被更新。我通过注册
touchmove
事件和scroll
事件的处理程序来解决拖动阶段的问题。但是我找不到解决惯性阶段问题的方法。div保持不动(并缓慢与页面的其余部分失去同步),直到惯性运动完全停止,当滚动事件最终被触发并跳到位置时。这里有一个可工作的演示。在iPad上尝试滚动以查看“惯性滚动”问题。不幸的是,由于iPad在iframe滚动方面的奇怪行为,我无法让它在jsFiddle上运行。如果我能在那个阶段进行轮询,就可以在两个元素之间保持一定的同步。我已经尝试过使用setTimeout、setInterval和requestAnimationFrame,但它们都不会在惯性滚动阶段触发。似乎在这个阶段所有的Javascript都停止了。
问题:
- 在惯性滚动阶段是否有任何触摸或滚动事件被触发? - 是否有任何方法在那个阶段运行Javascript回调函数? - 是否有一种方式可以使用CSS或其他技术(而非JS)来同步两个元素的滚动偏移量(只限于X或Y轴)?
position:fixed
属性。 - Tobia