我最初的猜测是答案是否定的,因为这里提供的证据:
https://github.com/inuyaksa/jquery.nicescroll/wiki/Native-scroll-vs-Hardware-accelerated-one
我可以定性地注意到“硬件加速”版本在我的计算机上滚动更流畅。我运行一个 120Hz 的显示器。这表明第二种方法更快、更有效。
对于 HTML 元素,例如
<div id="a" style="overflow-y: hidden; height: 100px">
Content <em>which exceeds 100px in height</em>
<img src='lolcat.png' alt='lolcat'/>
</div>
我想实现 3D 硬件加速布局的一种简单方法是渲染 div 的全高,然后将此输出作为全高的纹理加载,然后用于渲染实际 div 的纹理坐标将显示一次只有100px。
我的问题与scrollTop
属性在理论上应该如何做到这一点有关,但目前似乎有更好的机会通过使用两个元素来获得我描述的行为,如下所示:
<div id="a" style="overflow-y: hidden; height: 100px; position: relative">
<div style="position: relative">
Content <em>which exceeds 100px in height</em>
<img src='lolcat.png' alt='lolcat'/>
</div>
</div>
我没有设置scrollTop
属性,document.getElementById('a')
而是将 CCS3-webkit/moz/ms/o-transform
属性设置为具有相应负 Y 轴像素值的 3D 值。
使用 CSS3 进行滚动的最有效方法是什么?特别是,我如何构建我的 DOM 以最有可能获得最直接的滚动实现(在滚动元素时不会导致重新绘制内部内容)?
更新:我一直在用一个很不错的Chrome的平滑滚动插件,好像是用JS在页面上分配scrollTop偏移量来实现滚动渲染,这似乎说明如果这不是硬件加速的话,性能就不行了在没有大量 CPU 使用的情况下,真正跟上屏幕刷新率 (120Hz)。尽管如此,这种推测仍然极不科学。在这一点上我要得出的结论是,浏览器可以自由地加速他们在合理范围内选择的任何东西,所以答案是一个响亮的可能。