Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • will-change 使用优化动画性能

will-change 使用优化动画性能

will-change 属性提前通知浏览器元素即将发生的变化,使其可以提前优化资源分配。结合 transform 和 opacity 等硬件加速属性,动画性能显著提升。例如,图片悬停缩放时,通过 will-change: transform 提示浏览器提前准备 GPU 资源,减少卡顿。

.image-container {
  width: 300px;
  height: 300px;
  overflow: hidden;
  will-change: transform;
  transition: transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.image-container:hover {
  transform: scale(1.1);
}

更改完成后删除 浏览器为即将发生的变化所做的优化通常会占用机器的很多资源,通常要删除这些优化尽快恢复到正常行为。然而,will-change 覆盖了这一行为,它维持优化的时间比浏览器所做的要长很多。 因此,你应该始终记得在元素变化完成后删除 will-change,这样浏览器就可以恢复优化所占用的资源。 如果在样式表中声明了 will-change,就不可能删除它,这就是为什么建议你用 JavaScript 设置和取消它。通过脚本,你可以向浏览器声明你的修改,然后在修改完成后,通过监听这些修改完成的时间来删除 will-change。 例如,就像我们在上一节的样式规则中所做的那样,你可以监听元素(或其祖先)何时被悬停,然后在鼠标进入时设置 will-change。如果你的元素正在被动画化,你可以使用 DOM 事件 animationEnd 来监听动画何时结束,然后在 animationEnd 被触发时移除 will-change。

// 获取点击时将被动画化的元素,例如
var el = document.getElementById("element");

// 设置元素被悬停时的变化
el.addEventListener("mouseenter", hintBrowser);
el.addEventListener("animationEnd", removeHint);

function hintBrowser() {
  // 在动画的关键帧中要改变的可优化的属性
  this.style.willChange = "transform, opacity";
}

function removeHint() {
  this.style.willChange = "auto";
}
Edit this page
最近更新: 2025/12/2 01:46
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人