zoukankan      html  css  js  c++  java
  • 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 {
           30px;
          height: 30px;
          margin: 30px auto;
        }
        .serachIcon {
           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添加和删除类名即可。

  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/ZerlinM/p/14721957.html
Copyright © 2011-2022 走看看