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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM