css 线性渐变背景 CPU 高使用率
css linear-gradient background CPU high usage
需要在 body 中创建线性渐变动画,但它使用 cpu 很多,导致粉丝大声 运行。
我找到了这个解决方案
这个技巧将 cpu 使用率降低到 3-5%,这很棒。但是当你调整 window 的大小时,它会在后台创建一个错误。
试图创建调整大小功能,因为我猜想当您调整 window 大小时,宽度 属性 会发生变化,从而导致错误。但是没有成功。
[Codepen](https://codepen.io/iclassici/pen/poPXRyp)
正在做:
body.classList.remove('bg');
body.classList.add('bg');
实际上什么也没有发生,因为 class 在系统有机会 recalculate/redraw 之前恢复了。
您需要像之前那样删除 class,然后等待再恢复。试试 setTimeout 或 requestAnimationFrame。
如果您可以将您的代码编写成我们可以 运行 在您的问题中的代码片段,这将有助于我们进行测试并给出更完整的答案。
更新:采用 codepen 中给出的代码,此代码段对调整大小功能进行了更改,删除了 bganimation class,设置了短超时并恢复了 class。这确保系统将重置它提供给 GPU 的任何参数。
注意:在我相当强大的笔记本电脑上,Windows10,背景动画占用的 GPU 不到 2%CPU,大约占 GPU 的 20%。
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>
需要在 body 中创建线性渐变动画,但它使用 cpu 很多,导致粉丝大声 运行。
我找到了这个解决方案
这个技巧将 cpu 使用率降低到 3-5%,这很棒。但是当你调整 window 的大小时,它会在后台创建一个错误。
试图创建调整大小功能,因为我猜想当您调整 window 大小时,宽度 属性 会发生变化,从而导致错误。但是没有成功。
[Codepen](https://codepen.io/iclassici/pen/poPXRyp)
正在做:
body.classList.remove('bg');
body.classList.add('bg');
实际上什么也没有发生,因为 class 在系统有机会 recalculate/redraw 之前恢复了。
您需要像之前那样删除 class,然后等待再恢复。试试 setTimeout 或 requestAnimationFrame。
如果您可以将您的代码编写成我们可以 运行 在您的问题中的代码片段,这将有助于我们进行测试并给出更完整的答案。
更新:采用 codepen 中给出的代码,此代码段对调整大小功能进行了更改,删除了 bganimation class,设置了短超时并恢复了 class。这确保系统将重置它提供给 GPU 的任何参数。
注意:在我相当强大的笔记本电脑上,Windows10,背景动画占用的 GPU 不到 2%CPU,大约占 GPU 的 20%。
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>