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添加和删除类名即可。

  • 相关阅读:
    StatusStrip控件中元素右对齐方法两则
    在EF4.0中获取ObjectContext的数据库连接字符串
    通过反射调用泛型参数方法
    阻止保存要求重新创建表的更改
    [转]表达式解析的全部源码
    让ADO.NET SelfTracking Entity Generator产生的实体类支持RejectChanges()方法
    关于XtraGrid的CustomUnboundColumnData事件的触发条件
    WCF远程服务器强制关闭了一个连接
    让Sandcastle Help File Builder支持VS2010
    ==Entity Framework DBContext 增删改查深度解析
  • 原文地址:https://www.cnblogs.com/ZerlinM/p/14721957.html
Copyright © 2011-2022 走看看