自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

純CSS方式實(shí)現(xiàn)CSS動(dòng)畫的暫停與播放!

開發(fā) 前端
使用純 CSS 的方法,能否暫停、播放 CSS 動(dòng)畫?看起來不可能,至少很麻煩。本文介紹代碼來實(shí)現(xiàn)了純 CSS 方式實(shí)現(xiàn) CSS 動(dòng)畫的暫停與播放。

純 CSS 方式實(shí)現(xiàn) CSS 動(dòng)畫的暫停與播放!

使用純 CSS 的方法,能否暫停、播放 CSS 動(dòng)畫?看起來不可能,至少很麻煩。

我們知道,在 CSS3 animation 中,有這樣一個(gè)屬性可以暫停、播放動(dòng)畫:

  1.  
  2.     animation-play-state: paused | running; 
  3.  

 

animation-play-state: 屬性定義一個(gè)動(dòng)畫是否運(yùn)行或者暫停??梢酝ㄟ^查詢它來確定動(dòng)畫是否正在運(yùn)行。另外,它的值可以被設(shè)置為暫停和恢復(fù)的動(dòng)畫的重放。

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

  1. <div class="btn">stop</div> 
  2.  
  3. <div class="animation"></div> 
  4.  
  5. <style> 
  6.  
  7. .animation { 
  8.  
  9.     animation: move 2s linear infinite alternate; 
  10.  
  11.  
  12. @keyframes move { 
  13.  
  14.     0% { 
  15.  
  16.         transform: translate(-100px, 0); 
  17.  
  18.     } 
  19.  
  20.     100% { 
  21.  
  22.         transform: translate(100px, 0); 
  23.  
  24.     } 
  25.  
  26.  
  27. </style> 

 

 

  1. document.querySelector('.btn').addEventListener('click'function() { 
  2.  
  3.     let btn = document.querySelector('.btn'); 
  4.  
  5.     let elem = document.querySelector('.animation'); 
  6.  
  7.     let state = elem.style['animationPlayState']; 
  8.  
  9.      
  10.  
  11.     if(state === 'paused') { 
  12.  
  13.         elem.style['animationPlayState'] = 'running'
  14.  
  15.         btn.innerText = 'stop'
  16.  
  17.     } else { 
  18.  
  19.         elem.style['animationPlayState'] = 'paused'
  20.  
  21.         btn.innerText = 'play'
  22.  
  23.     } 
  24.  
  25.      
  26.  
  27. }); 

 

Demo — pause CSS Animation(https://codepen.io/Chokcoco/pen/GWYBdM)

純 CSS 實(shí)現(xiàn)

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

hover 偽類實(shí)現(xiàn)

使用 hover 偽類,在鼠標(biāo)懸停在按鈕上面時(shí),控制動(dòng)畫樣式的暫停。

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

  1. <div class="btn stop">stop</div> 
  2.  
  3. <div class="animation"></div> 
  4.  
  5. <style> 
  6.  
  7. .stop:hover ~ .animation { 
  8.  
  9.     animation-play-state: paused; 
  10.  
  11.  
  12. </style> 

 

Demo — 純 CSS 方式實(shí)現(xiàn) CSS 動(dòng)畫的暫停與播放 (Hover):(https://codepen.io/Chokcoco/pen/PpxKBX)

當(dāng)然,這個(gè)方法不夠智能,如果釋放鼠標(biāo)的自由,點(diǎn)擊一下暫停、再點(diǎn)擊一下播放就好了。還有其他方法嗎?

checked 偽類實(shí)現(xiàn)

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

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

  1. <input id="stop" type="radio" name="playAnimation" /> 
  2.  
  3. <input id="play" type="radio" name="playAnimation" /> 
  4.  
  5. <div class="box"
  6.  
  7.     <label for="stop"
  8.  
  9.         <div class="btn">stop</div> 
  10.  
  11.     </label> 
  12.  
  13.     <label for="play"
  14.  
  15.         <div class="btn">play</div> 
  16.  
  17.     </label> 
  18.  
  19. </div> 
  20.  
  21. <div class="animation"></div> 

 

部分關(guān)鍵 CSS 代碼:

  1. .animation { 
  2.  
  3.     animation: move 2s linear infinite alternate; 
  4.  
  5.  
  6.   
  7.  
  8. #stop:checked ~ .animation { 
  9.  
  10.     animation-play-state: paused; 
  11.  
  12.  
  13.   
  14.  
  15. #play:checked ~ .animation { 
  16.  
  17.     animation-play-state: running; 
  18.  

 

我們希望當(dāng) #stop 和 #play 兩個(gè) radio 被點(diǎn)擊時(shí),給 .animation 元素分別賦予 animation-play-state: paused 或是 animation-play-state: running 。而且二者只能生效其一,所以需要給兩個(gè) radio 標(biāo)簽賦予相同的 name 屬性。

DEMO — 純 CSS 方式實(shí)現(xiàn) CSS 動(dòng)畫的暫停與播放:(https://codepen.io/Chokcoco/pen/QpJwBW)

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

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

到此本文結(jié)束,如果還有什么疑問或者建議,可以多多交流,原創(chuàng)文章,文筆有限,才疏學(xué)淺,文中若有不正之處,萬望告知。

開本系列,談?wù)勔恍┯腥さ?CSS 題目,題目類型天馬行空,想到什么說什么,不僅為了拓寬一下解決問題的思路,更涉及一些容易忽視的 CSS 細(xì)節(jié)。

解題不考慮兼容性,題目天馬行空,想到什么說什么,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補(bǔ)習(xí)一下吧。

不斷更新,不斷更新,不斷更新,重要的事情說三遍。 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2022-08-29 17:39:53

應(yīng)用開發(fā)css動(dòng)畫

2023-11-01 08:33:45

CSS動(dòng)畫效果

2021-10-19 22:23:47

CSSBeautiful按鈕

2024-08-29 08:13:58

2022-03-28 08:44:15

css3水波動(dòng)畫

2021-02-09 07:26:38

前端css技術(shù)熱點(diǎn)

2021-01-19 12:16:10

CSS前端UI

2022-09-12 08:31:41

CSS3偽類URI

2022-02-21 07:02:16

CSSbeautiful按鈕

2020-11-04 13:55:06

CSS密室逃脫前端

2022-08-10 16:08:38

鴻蒙CSS

2013-04-08 14:07:28

CSS

2024-03-13 08:21:53

冒泡排序動(dòng)畫

2021-01-25 06:37:06

Css前端CSS 特效

2017-05-03 11:30:20

CSS3小黃人動(dòng)畫

2024-07-31 20:38:18

2022-03-16 14:27:49

CSS三角形前端

2015-04-24 10:05:15

HTML+CSS阿童木頭像

2024-05-09 00:00:00

CSS標(biāo)簽JavaScript

2023-06-05 09:28:32

CSS漸變
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)