我需要使一个元素的滚动偏移量与另一个元素(实际上是窗口)保持同步,而在移动 Safari(iPad)上滚动的惯性“滚降”阶段,我无法做到这一点。
我有几个 div,position:fixed; overflow:hidden
我需要保持它们的滚动偏移与窗口的同步(意味着整个身体滚动。)通常我会这样编码(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,不是两者)的滚动偏移量?