css - css线性渐变背景CPU高使用率
问题描述
需要在 body 中创建线性渐变动画,但它使用 cpu 很多,导致风扇大声运行。
我发现这个解决方案 动画线性渐变吞噬了 CPU 使用率
这个技巧将 cpu 使用率降低到 3-5%,这很棒。但是,当您调整窗口大小时,它会在后台创建一个错误。
尝试创建调整大小功能,因为我猜当您调整窗口大小时,宽度属性会发生变化,从而导致错误。但它没有成功。
[Codepen](https://codepen.io/iclassici/pen/poPXRyp)
解决方案
这样做:
body.classList.remove('bg');
body.classList.add('bg');
实际上什么都没有发生,因为在系统有机会重新计算/重绘东西之前恢复了类。
您需要像以前一样删除该类,然后等待再恢复它。尝试 setTimeout 或 requestAnimationFrame。
如果您可以将您的代码制作成一个片段,我们可以在您的问题中运行它,这将有助于我们测试事物并给出更完整的答案。
更新:使用 codepen 中给出的代码,此代码段对 resize 函数进行了更改,删除了 bganimation 类,设置了短超时并恢复了该类。这确保系统将重置它提供给 GPU 的任何参数。
注意:在我相当强大的笔记本电脑 Windows 10 上,背景动画主要占用不到 2% 的 CPU 和大约 20% 的 GPU。
window.addEventListener("resize", myFunction);
function myFunction() {
body = document.getElementsByTagName('body')[0];
body.classList.remove('bganimation');
setTimeout(function() {
body.classList.add('bganimation');
}, 100);
}
.bg {
width: 100vw;
height: 100vh;
}
.bg::before {
content: '';
position: fixed;
z-index: -2;
top: 0;
left: 0;
width: 600%;
height: 100%;
bottom: 0;
background: linear-gradient(45deg, #F17C58, #E94584, #24AADB, #27DBB1, #FFDC18, #FF3706);
background-size: 100% 100vh;
background-repeat: no-repeat no-repeat;
background-position: left top;
}
.bganimation {
animation: gradient 16s linear infinite alternate;
}
@keyframes gradient {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-400vw);
/* 5/6x100% */
}
}
<body class="bg bganimation">
</body>
推荐阅读
- react-google-maps - react-google-maps 到 @react-google-maps/api 的迁移,OverlayType 的常量
- c# - 更新面板不添加新控件但显示新控件
- airflow - 气流:优先处理 Dags
- angular - 如何根据函数的返回值禁用 Angular 中的按钮?
- java - 在 Beanshell 中获取 RFC1123_time(使用 JMeter)
- xamarin - 如何防止编辑器在 Xamarin.Forms 的键盘后面?
- android - Android - Populate values into already created POJO model object using retrofit
- c - 从 1..N 中找到缺失的数字
- c - 将函数声明为 static 以使其私有或仅在 .c 文件上声明并将其从标头中排除是否更好?
- php - Passing path in extractTo function displaying error:Invalid or uninitialized Zip object in PHP