我们的网站上有视差滚动。
它很简单,每边有 4 层,根据线性函数以不同的速度滚动。
但是,它并不像我想要的那样顺利,尤其是当我打开多个标签时。
您注意到滚动和视差图像更新之间的轻微延迟以及帧速率降低。
小屏幕上的帧率要好得多(我正在开发 27 英寸屏幕),但我想在所有屏幕上获得最佳性能。
这是设置滚动的代码:
win = $(window)
footerHeight = $('footer').height()
win.scroll ->
scroll = win.scrollTop()
baseTop = 183 - scroll - 6*scroll/footerHeight
for layer in [0..7]
el = parallaxLayers[layer].element
top = parseInt(baseTop - scroll * (10 + layer % 4 * 30)/footerHeight)
left = parallaxLayers[layer].left
el.style.backgroundPosition = "#{left}px #{top}px"
这是 CoffeeScript,但我希望它对大多数 JS 开发人员来说足够简单。
我已经做的事情:
- 预取所有元素,以便可以在函数中立即访问它们。
- 预取,
background-position-x
因此不需要每次迭代都获取它。 - 由于开销增加,请勿使用 jQuery 设置样式。
- 尽可能少地计算所有内容(因此
baseTop
)
每一层都是静态定位的,所以它们不会抖动,我确保修改背景位置,这样我就不会导致页面重排。
还有什么我可以尝试的吗?
由于性能与屏幕大小成比例,我相信这是一个渲染问题,而不是 JS 问题。也许一些花哨的 CSS3 可能会有所帮助?