溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果

發(fā)布時間:2020-07-13 14:51:40 來源:億速云 閱讀:1053 作者:Leah 欄目:web開發(fā)

如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

使用純 CSS 的方法,暫?;虿シ?CSS 動畫。是不是看起來應(yīng)該是不可能的實現(xiàn)的;或者就算可以實現(xiàn),也是一個很麻煩的實現(xiàn)方法,需要用大量的css樣式才可以實現(xiàn)。其實不然,在 CSS3 animation 中,就有這樣一個屬性可以做到暫停、播放動畫。

animation-play-state屬性

 animation-play-state: paused | running;

animation-play-state: 屬性定義一個動畫是否運行或者暫停。可以通過查詢它來確定動畫是否正在運行。另外,它的值可以被設(shè)置為暫停和恢復(fù)的動畫的重放。

如果借助 Javascript,我們可以實現(xiàn)控制 CSS 動畫的運行和播放,下面列出部分關(guān)鍵代碼:

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('.btn').addEventListener('click', function() {
    let btn = document.querySelector('.btn');
    let elem = document.querySelector('.animation');
    let state = elem.style['animationPlayState'];
    
    if(state === 'paused') {
        elem.style['animationPlayState'] = 'running';
        btn.innerText = 'stop';
    } else {
        elem.style['animationPlayState'] = 'paused';
        btn.innerText = 'play';
    }
    
});

效果圖(播放時和停止播放后):

如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果

純 CSS 實現(xiàn)

下面我們探討下,使用純 CSS 的方式能否實現(xiàn)。

hover 偽類實現(xiàn)

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

關(guān)鍵代碼如下:

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方式實現(xiàn)CSS動畫的暫停與播放效果如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果

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

checked 偽類實現(xiàn)

之前的文章《有趣的 CSS 題目(8):純CSS的導(dǎo)航欄Tab切換方案》也談過,使用 radio 標簽的 checked 偽類,加上 實現(xiàn)純 CSS 捕獲點擊事情。

并且利用被點擊的元素可以控制一些 CSS 樣式。實現(xiàn)如下:

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方式實現(xiàn)CSS動畫的暫停與播放效果如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果

上面的示例中,實現(xiàn)了純 CSS 方式實現(xiàn) CSS 動畫的暫停與播放。

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

關(guān)于如何用純CSS方式實現(xiàn)CSS動畫的暫停與播放效果問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI