CSS实现动画的暂停和播放

动画场景: 让一个圆形图框让它转动起来。当然如果单纯这样做很简单,声明一个keyframe,控制transform: rotate(deg)属性从0到360度变化。然后在animation中使用这个keyframe就可以了。
在这个基础上再要求: 增加动画的暂停和重新播放功能。
这样的话又该如何实现呢?就类似于音乐软件的那个转盘,想要让它在音乐暂停的时候转动动画也暂停,等到音乐播放的时候再继续转动,如下所示。

这时候我发现了一个最为关键的问题:传统的animation属性或者keyframe提供的是没有中断控制的功能,也就是直接从开始播放到结束。

正当我感到烦恼的时候我查询到了一个我正需要的CSS属性:animation-play-state
它包含有两个值:paused和running。
前者可以使animation属性制定的动画处于暂停状态,后者可以使动画处于播放状态。

下面我们来实现暂停和继续的功能:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport"
  content="viewport-fit=cover,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no,target-densitydpi = medium-dpi" />
  <meta name="format-detection" content="telephone=no" />
  <meta name="apple-touch-fullscreen" content="yes" />
  <meta name="apple-mobile-web-app-capable" content="yes" />

  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .btns {
      text-align: center;
    }
    .search {
      width: 30px;
      height: 30px;
      margin: 30px auto;
    }
    .serachIcon {
      width: 100%;
      animation: searchRotate 3s linear infinite;
    }
    @keyframes searchRotate {
      0% {
        transform:rotateZ(0deg);
      }
      100% {
        transform:rotateZ(360deg);
      }
    }
    .active {
      animation-play-state: running;
    }
    .paused {
      animation-play-state: paused;
    }
  </style>
</head>

<body>
  <div class="search">
    <img class="serachIcon" src="./img/search.png" alt="">
  </div>
  <div class="btns">
    <button class="paused">暂停/继续</button>
  </div>
  <script src="./js/jquery-2.2.4.min.js"></script>
  <script>
    var playFlag = true;
    $('.paused').on('click', () => {
      if(playFlag) {
        $('.serachIcon').removeClass('active').addClass('paused');
        playFlag = false;
      } else {
        $('.serachIcon').removeClass('paused').addClass('active');
        playFlag = true;
      }
    });
  </script>
</body>
</html>

在style中添加了两个类:active类和paused类,分别设为animation-play-state: running; 和animation-play-state: paused;
当我们点击 暂停/继续 按钮的时候,给serachIcon添加和删除类名即可。

posted @ 2021-04-30 14:45  ZerlinM  阅读(1409)  评论(0编辑  收藏  举报