怎么使css 动画停止,如何用纯CSS方式实现CSS动画的暂停与播放效果?animation-play-state属性介绍(详解)...

使用纯 CSS 的方法,暂停或播放 CSS 动画。是不是看起来应该是不可能的实现的;或者就算可以实现,也是一个很麻烦的实现方法,需要用大量的css样式才可以实现。其实不然,在 CSS3 animation 中,就有这样一个属性可以做到暂停、播放动画。本章就给大家介绍如何用纯CSS方式实现CSS动画的暂停与播放效果?animation-play-state属性介绍(详解)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

animation-play-state属性animation-play-state: paused | running;

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

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

html代码:

stop

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';

}

});

效果图(播放时和停止播放后):

ed6239686fc251690cb46115d27c79b2.png

19c19b5a0d2ef845eb35d83811b8ed17.png

纯 CSS 实现

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

hover 伪类实现

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

关键代码如下:

html代码:

stop

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;

}

效果图:

1a18d9ff3ffdf609244ca9fbbfd1b29f.png

afdcb5640b80c4a1213bb68d57b38e22.png

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

checked 伪类实现

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

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

html代码:

stop
play

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 属性。

效果图:

5b5b5b72b175bb35e01f4dd063da94cb.png

69356743a727ddbb6460752207b0f0ba.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值