窗口调整大小期间停止动画

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程每个阶段提供云产品。 立即开始使用 $200 免费信用额度!

假设您的页面上有很多元素的过渡和动画。 其中一些会在窗口调整大小后触发,因为它们与页面大小、位置、填充或其他因素有关。 无论是什么原因,过渡或动画运行可能会导致在调整窗口大小时出现卡顿感。 如果这些过渡或动画在这些情况下没有带来任何好处,则可以将其关闭!

诀窍是应用一个类来全局关闭所有过渡和动画

let resizeTimer;
window.addEventListener("resize", () => {
  document.body.classList.add("resize-animation-stopper");
  clearTimeout(resizeTimer);
  resizeTimer = setTimeout(() => {
    document.body.classList.remove("resize-animation-stopper");
  }, 400);
});

现在,我们在 <body> 上有一个 resize-animation-stopper 类,可以强制禁用窗口调整大小期间的任何过渡或动画,并在超时清除后消失。

.resize-animation-stopper * {
  animation: none !important;
  transition: none !important;
}

可能存在比 setTimeout 更高效的方式来实现这一点,但这只是概念。 我在这个网站上(v17)使用了它,因为我发现了一些严重的调整大小卡顿。 它并没有完全消除卡顿,但明显改善了。

这是一个例子

查看笔
调整大小后关闭动画?
作者:Chris Coyier (@chriscoyier)
CodePen 上。

该演示主要用于展示工作代码。 可能没有足够的过渡来注意到明显的调整大小卡顿。