首頁  >  文章  >  web前端  >  如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)

如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)

青灯夜游
青灯夜游原創
2018-09-15 15:44:103767瀏覽

使用純 CSS 的方法,暫停或播放 CSS 動畫。是不是看起來應該是不可能的實現的;或者就算可以實現,也是一個很麻煩的實現方法,需要用大量的css樣式才可以實現。其實不然,在 CSS3 animation 中,就有這樣一個屬性可以做到暫停、播放動畫。本章就跟大家介紹如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)。有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

animation-play-state屬性

 animation-play-state: paused | running;

animation-play-state: 屬性定義一個動畫是否運作或暫停。可以透過查詢它來確定動畫是否正在運行。另外,它的值可以被設定為暫停和恢復的動畫的重播。

如果借助Javascript,我們可以實現控制CSS 動畫的運行和播放,以下列出部分關鍵程式碼:

html程式碼:

<div class="btn">stop</div> 
<div class="animation"></div>

css程式碼:

.animation {
    width: 100px;
    height: 100px;
    margin: 50px auto;
    background: deeppink;
    animation: move 2s linear infinite alternate;
}

@keyframes move {
    0% {
        transform: translate(-100px, 0);
    }
    100% {
        transform: translate(100px, 0);
    }
}

.btn {
    width: 50px;
    margin: 10px auto;
    text-align: center;
    border:1px solid #ddd;
    padding: 10px;
    border-radius: 5px;
    cursor:pointer;
    
    &:hover {
        background: #ddd;
        color: #333;
    }
    
    &:active {
        background: #aaa;
    }
}

js程式碼:

document.querySelector(&#39;.btn&#39;).addEventListener(&#39;click&#39;, function() {
    let btn = document.querySelector(&#39;.btn&#39;);
    let elem = document.querySelector(&#39;.animation&#39;);
    let state = elem.style[&#39;animationPlayState&#39;];
    
    if(state === &#39;paused&#39;) {
        elem.style[&#39;animationPlayState&#39;] = &#39;running&#39;;
        btn.innerText = &#39;stop&#39;;
    } else {
        elem.style[&#39;animationPlayState&#39;] = &#39;paused&#39;;
        btn.innerText = &#39;play&#39;;
    }
    
});

效果圖(播放時與停止播放後):

如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)

純CSS 實作

在下面我們探討下,使用純CSS 的方式能否實現。

hover 偽類實作

使用 hover 偽類,在滑鼠停留在按鈕上面時,控制動畫樣式的暫停。

關鍵程式碼如下:

html程式碼:

<div class="btn stop">stop</div> 
<div class="animation"></div>

css程式碼:

.animation {
    width: 100px;
    height: 100px;
    margin: 50px auto;
    background: deeppink;
    animation: move 2s linear infinite alternate;
}

input {
    display: none;
}

@keyframes move {
    0% {
        transform: translate(-100px, 0);
    }
    100% {
        transform: translate(100px, 0);
    }
}

.btn {
    width: 50px;
    margin: 10px auto;
    text-align: center;
    border:1px solid #ddd;
    padding: 10px;
    border-radius: 5px;
    cursor:pointer;
    
    &:hover {
        background: #ddd;
        color: #333;
    }
    
    &:active {
        background: #aaa;
    }
}

.stop:hover ~ .animation {
    animation-play-state: paused;
}

效果圖:

如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)

##當然,這個方法不夠智能,如果放開滑鼠的自由,點擊一下暫停、再點擊一下播放就好了。還有其他方法嗎?

checked 偽類實作

之前的文章《有趣的CSS 題目(8):純CSS的導覽列Tab切換方案》也談過,使用radio 標籤的checked 偽類,加上實現純CSS 捕獲點擊事情。

並且利用被點擊的元素可以控制一些 CSS 樣式。實作如下:

html程式碼:


<input id="stop" type="radio" name="playAnimation"/>
<input id="play" type="radio" name="playAnimation"/>

<div class="box">
    <label for="stop">
        <div class="btn">stop</div>
    </label>
    <label for="play">
        <div class="btn">play</div>
    </label>
</div>

<div class="animation"></div>

css程式碼:


.animation {
    width: 100px;
    height: 100px;
    margin: 50px auto;
    background: deeppink;
    animation: move 2s linear infinite alternate;
}

input {
    display: none;
}

@keyframes move {
    0% {
        transform: translate(-100px, 0);
    }
    100% {
        transform: translate(100px, 0);
    }
}

.btn {
    width: 50px;
    margin: 10px auto;
    text-align: center;
    border:1px solid #ddd;
    padding: 10px;
    border-radius: 5px;
    cursor:pointer;
    
    &:hover {
        background: #ddd;
        color: #333;
    }
    
    &:active {
        background: #aaa;
    }
}

#stop:checked ~ .animation {
    animation-play-state: paused;
}

#play:checked ~ .animation {
    animation-play-state: running;
}

我們希望當#stop 和#play 兩個radio 被點擊時,給.animation 元素分別賦予animation-play-state: paused 或是animation-play-state: running 。而二者只能生效其一,所以需要給予兩個 radio 標籤相同的 name 屬性。

效果圖:

如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)

在上面的範例中,實作了純 CSS 方式實作 CSS 動畫的暫停與播放。

當然,還有一些其他方法,例如 radio 替換成 checkbox ,或者使用 :target 偽類選擇器也能實現上面同樣的效果,感興趣的可以嘗試一下。

以上是如何用純CSS方式實現CSS動畫的暫停與播放效果? animation-play-state屬性介紹(詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn