我有一个循环播放HTML5视频的页面。当您向下滚动页面时,jQuery会向nav元素添加一个类。然后CSS将转换应用于th的left属性。在Firefox中它运行得很好,但是除非你继续滚动,否则Chrome会破坏动画并且无法完成动画。
我知道Chrome和HTML5视频存在很多性能问题。 Like this但我找不到一个好的解决方案。
删除背景视频会导致Chrome中的动画流畅。但是,它不是一个非常沉重的视频(360p,~1MB)我想知道是否有更好的方法来应用课程或执行动画,而不是我正在做的可能有助于Chrome的性能。
以下是正在进行的网站的链接(它主要是非风格的,所以请不要讨厌:)
我的HTML
<!-- Left Bar Menu -->
<div class="leftbar scrollHandle">
</div>
<!-- Contains Header Video on Loop -->
<div class="videocontainer">
<video class="videobackground" poster="{{ "assets/video/poster.jpg" | asset_url }}" autoplay="true" loop="true">
<source type="video/mp4" src="{{ "assets/video/360.mp4" }}" />
<source type="video/webm" src="{{ "assets/video/360.webm" }}" />
</video>
</div>
我的Javascript:
var containerPosition = $( ".container" ).offset();
$( window ).scroll(function() {
if ( $( window ).scrollTop() > containerPosition.top ) {
$( ".scrollHandle" ).addClass( "show" );
} else {
$( ".scrollHandle" ).removeClass( "show" )
};
});
我的CSS:
.leftbar {
position: fixed;
top: 0;
left: -$leftbarwidth;
transition: left 500ms;
z-index: 2;
width: $leftbarwidth;
height: 100%;
background-color: $grey;
&.show {
left: 0;
transition: left 500ms;
}
}
答案 0 :(得分:7)
每个卷轴上的整个屏幕都是painting。
这是因为您的网页上有fixed
元素(在您的情况下)。固定元素将在每个滚动上导致绘制,因为固定元素保持在原位并且下面的内容移动导致浏览器必须重新绘制屏幕以便正确显示内容。
绘画
在绘画阶段,遍历渲染树,渲染器&#34; paint()&#34;调用方法以在屏幕上显示内容。绘画使用UI基础设施组件 source
fixed
来保持您的视频包含在您的div和页面的顶部。translate()
而不是position
上的转换。translateZ(0);
或css will-change .leftbar {
position: fixed;
top: 0;
left: -$leftbarwidth;
z-index: 2;
width: $leftbarwidth;
height: 100%;
background-color: $grey;
/* for performance improvements: */
-webkit-transition: -webkit-transform 0.5s ease;
-webkit-transform: translateZ(0); /* promotes to a layer */
&.show {
-webkit-transform: translate3d($leftbarwidth, 0, 0);
}
}
如果fixed
元素有自己的图层,它也不会在每次滚动时重新绘制屏幕,那么将元素提升到自己的图层将启动硬件加速而不是使用CPU。
-webkit-transform: translateZ(0); /* promotes to a layer */
我已经在chrome中的开发者工具中更改了网站上的代码,经过一些小的css更改后,我们从<30到60fps,继承图表:
在丢失一些固定元素后,你会从&lt; 30fps 变为稳定的 60fps ,将视频包含在div中,提升图层并使用translate()
代替position: left
对过渡的影响。
请注意,您不希望将所有内容放在图层上,因为过多使用此图也会影响您的效果。所以请适度使用
我知道Chrome和HTML5存在很多性能问题 视频...
我不同意你的看法,如果你对网站的性能进行编码,那么即使有本机性能问题(我不认为html5 / chrome有),你的性能也会更好或更好。如果我错了,请纠正我。