Dom*_*adl 12 html javascript css
我的微型网站有问题.当我滚动时,除了Safari之外,它在所有浏览器中都很流畅.当我在Safari中滚动时,内容div会经常跳转或移动(它应该保持原位)并使滚动看起来不稳定.你知道什么是错的吗?
这是网站:http:
//beta.dynamicdust.com
我看了一下,确实看到了你提到的"波涛汹涌"滚动(看得更多,它被击中或错过 - 有时它很平滑,有时它非常不稳定).
看起来你parallax在Safari 上的回调有一些性能问题(虽然如果它是Safari的一些错误实现,我不会感到惊讶...)
我建议的一件事是看看requestAnimationFramewebkit.对于测试,我包装了逻辑来更新a中的偏移量raf(并缓存了window.pageYOffset值),结果看起来更顺畅.
function parallax(e) {
window.webkitRequestAnimationFrame(function() {
var offset = window.pageYOffset;
a.style.top = (offset / 2) + "px";
b.style.top = (offset / 2) + "px";
textbox.style.top =- (offset * 0.7) + "px";
textbox2.style.top =- (offset * 0.7) + "px";
});
}
Run Code Online (Sandbox Code Playgroud)
说实话,你可以使用raf所有浏览器(如果他们支持它).
人们在动画元素时使用的另一个技巧是加速你动画元素所在的图层.有几种方法可以做到这一点,但最简单的方法是使用-webkit-transition和设置translateZ(0).添加另外两行也不会有什么坏处:
-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;
Run Code Online (Sandbox Code Playgroud)
另外,我注意到你偏移(使用style)的一些元素是position: relative- 就个人而言,我会说任何要动画的元素应该是position: absolute.这将从DOM中删除元素,并且抵消它不会导致回流到周围元素(这可能导致您的波动).
编辑 - 我注意到的另一件事是当你在safari上遇到橡皮筋时会发生"不稳定/怪异"(我的猜测是负值).这可能是你想要看的东西.
祝好运!
小智 8
我没有检查过我的答案与Jack的比较,但我认为问题在于Safari试图提高功效.因此,除非需要,否则启用硬件加速是犹豫不决的.人们用来强制硬件加速的一个常见技巧是
-webkit-transform: translate3d(0, 0, 0);
将css放入正在移动的div中.我尝试了内容类,它看起来好一点.您也可以尝试将其应用于其他图层.
编辑:我也将它应用于左右文本持有者div,页面看起来就像Chrome一样流畅.
只是记下这个,正如我今天用一个溢出的auto元素遇到的那样:
解决方案是将此规则添加到滚动条显示的任何元素上:
-webkit-overflow-scrolling: touch;
可以在这里找到更多详细信息:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/-webkit-overflow-scrolling