视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
用css实现css动画的暂停与播放功能教程
2020-11-27 18:49:55 责编:小采
文档

CSS是一种定义样式结构如字体、颜色、位置等的语言,被用于描述网页上的信息格式化和现实的方式。CSS样式可以直接存储于HTML网页或者单独的样式单文件。无论哪一种方式,样式单包含将样式应用到指定类型的元素的规则。本节内容我们就和大家分享一下用css实现css动画的暂停与播放功能的教程。

我们知道,在 CSS3 animation 中,有这样一个属性可以暂停、播放动画:

{ 
 animation-play-state: paused | running; 
 }

animation-play-state: 属性定义一个动画是否运行或者暂停。可以通过查询它来确定动画是否正在运行。另外,它的值可以被设置为暂停和恢复的动画的重放。

如果借助 Javascript,我们可以实现控制 CSS 动画的运行和播放,下面列出部分关键代码:

<div class="btn">stop</div> <div class="animation"></div> 
 <style> .animation { animation: move 2s linear infinite alternate; } 
 @keyframes move { 0% { transform: translate(-100px, 0); } 
 100% { transform: translate(100px, 0); } }
 </style> 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'; } }); 
Demo — pause CSS Animation(https://codepen.io/Chokcoco/pen/GWYBdM)

纯 CSS 实现

下面我们探讨下,使用纯 CSS 的方式能否实现。

hover 伪类实现

使用 hover 伪类,在鼠标悬停在按钮上面时,控制动画样式的暂停。

关键代码如下:

<div class="btn stop">stop</div> 
 
<div class="animation"></div> 
 
<style> 
 .stop:hover ~ .animation { 
 
 animation-play-state: paused; 
 
} 
 
</style>

Demo — 纯 CSS 方式实现 CSS 动画的暂停与播放 (Hover):(https://codepen.io/Chokcoco/pen/PpxKBX)

当然,这个方法不够智能,如果释放鼠标的自由,点击一下暂停、再点击一下播放就好了。还有其他方法吗?

checked 伪类实现

之前的文章《有趣的 CSS 题目(8):纯CSS的导航栏Tab切换方案》也谈过,使用 radio 标签的 checked 伪类,加上 实现纯 CSS 捕获点击事情。

并且利用被点击的元素可以控制一些 CSS 样式。实现如下:

<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 { 
 
 animation: move 2s linear infinite alternate; 
 
} 
 
 
 #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 属性。

DEMO — 纯 CSS 方式实现 CSS 动画的暂停与播放:(https://codepen.io/Chokcoco/pen/QpJwBW)

上面的示例 Demo 中,实现了纯 CSS 方式实现 CSS 动画的暂停与播放。

当然,还有一些其他方法,例如 radio 替换成 checkbox ,或者使用 :target 伪类选择器也能实现上面同样的效果,感兴趣的可以尝试一下。

下载本文
显示全文
专题