在下面的小提琴中,滚动时会出现明显的抖动。只有在Mac上的Safari中才会注意到抖动,而Chrome和Firefox会平滑地滚动页面。
https://jsfiddle.net/saptarshi17/akxuLL9x/
抖动是对第一段应用视差效果的结果。通过动态计算scroll
事件触发的mousewheel
css属性来实现视差。我在Mac OSX El Capitan上注意到这一点,不确定Windows。
到目前为止,我试过了:
scroll
上添加css("top", ...)
事件监听器以及requestAnimationFrame()
。relative
absolute
函数调用
preserve3d
更改为{{1}}以避免代价高昂的回流。由于2和3没有帮助,我认为核心问题与Safari的滚动实现有很大关系,而与帧速率优化有关。延迟Safari的预测渲染和随后的处理程序调用会抵消位置。这导致2次渲染导致抖动。虽然我理解Safari在大多数情况下第一次渲染背后的意图,但在开发人员想要覆盖定位的情况下,这似乎是错误的。也许有办法告诉Safari禁用预测渲染。