CSS 切换标签页时暂停/恢复 CSS 动画

在本文中,我们将介绍如何在切换浏览器标签页时暂停和恢复 CSS 动画。CSS 动画是网页中常用的一种交互效果,但在用户切换标签页时,动画仍然继续运行可能会浪费系统资源,影响用户体验。下面我们将看到如何通过 CSS 和 JavaScript 实现在切换标签页时暂停和恢复 CSS 动画。

阅读更多:CSS 教程

使用 visibility 属性暂停动画

CSS 的 visibility 属性可以控制元素的可见性,将元素的 visibility 属性设置为 hidden 可以让元素不可见但仍保留其尺寸和位置。我们可以利用这个特性来实现在切换标签页时暂停动画。

首先,我们给需要暂停动画的元素添加一个类名,例如 “pause-animation”。然后,在 CSS 中定义这个类名的样式:

.pause-animation {
  animation-play-state: paused;
}

接下来,我们需要使用 JavaScript 来控制在切换标签页时添加或移除这个类名。我们可以使用 visibilitychange 事件来监听浏览器标签页的可见性变化。

document.addEventListener("visibilitychange", function() {
  var elements = document.getElementsByClassName("pause-animation");
  for (var i = 0; i < elements.length; i++) {
    if (document.hidden) {
      elements[i].classList.add("paused");
    } else {
      elements[i].classList.remove("paused");
    }
  }
});

以上代码通过监听 visibilitychange 事件,在浏览器标签页不可见时将类名 “paused” 添加到所有带有 “pause-animation” 类名的元素上,使动画暂停;当浏览器标签页恢复可见时,移除类名 “paused”,使动画恢复。

使用 JavaScript 暂停动画

除了使用 visibility 属性,我们还可以使用 JavaScript 来直接控制动画的播放状态。在这种方法中,我们可以通过添加和移除动画的类名来控制动画的暂停和恢复。

首先,我们需要将动画的类名添加到需要暂停的元素上。例如,我们可以将类名 “pause-animation” 添加到需要暂停动画的元素上。

接下来,我们可以使用 JavaScript 来监听浏览器标签页的可见性变化,并根据需要添加或移除动画的类名。例如:

document.addEventListener("visibilitychange", function() {
  var elements = document.getElementsByClassName("pause-animation");
  for (var i = 0; i < elements.length; i++) {
    if (document.hidden) {
      elements[i].classList.add("paused");
    } else {
      elements[i].classList.remove("paused");
    }
  }
});

以上代码通过监听 visibilitychange 事件,在浏览器标签页不可见时将类名 “paused” 添加到所有带有 “pause-animation” 类名的元素上,使动画暂停;当浏览器标签页恢复可见时,移除类名 “paused”,使动画恢复。

示例

下面我们将提供一个示例,演示如何在切换标签页时暂停和恢复 CSS 动画。

<!DOCTYPE html>
<html>
  <head>
    <style>
      .box {
        width: 300px;
        height: 300px;
        background-color: red;
        animation: rotate 4s infinite;
      }

      .paused {
        animation-play-state: paused;
      }

      @keyframes rotate {
        0% {
          transform: rotate(0deg);
        }
        100% {
          transform: rotate(360deg);
        }
      }
    </style>
  </head>
  <body>
    <div class="box pause-animation"></div>

    <script>
      document.addEventListener("visibilitychange", function() {
        var elements = document.getElementsByClassName("pause-animation");
        for (var i = 0; i < elements.length; i++) {
          if (document.hidden) {
            elements[i].classList.add("paused");
          } else {
            elements[i].classList.remove("paused");
          }
        }
      });
    </script>
  </body>
</html>

在上面的示例中,我们定义了一个带有类名 “box” 的 div 元素,并设置了一个动画效果:在 4 秒钟内将其旋转一周。通过给这个 div 元素添加类名 “pause-animation”,我们使动画在切换标签页时暂停。通过 JavaScript 的监听,当切换到其他标签页时,动画将暂停;当切换回到该标签页时,动画将恢复。

总结

通过使用 visibility 属性或 JavaScript 控制动画类名的添加和移除,我们可以在切换浏览器标签页时暂停和恢复 CSS 动画。这样能够避免浪费系统资源,提高用户体验。无论是使用 visibility 属性还是 JavaScript,我们都能轻松地实现切换标签页时暂停和恢复 CSS 动画的效果。迁技术助手为您解答,希望对您有所帮助!

最后修改:2024 年 05 月 30 日
如果觉得我的文章对你有用,请随意赞赏