1. 首页

【趣聊Css-10】纯 CSS 方式实现 CSS 动画的暂停与播放

使用纯 CSS 的方法,能否暂停、播放纯 CSS 动画?看起来不可能,至少很麻烦。

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

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

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

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

<div class="btn">stop</div>
<div class="animation"></div>
//JS中文网 – 前端进阶资源分享 www.javascriptc.com 趣聊CSS系列
<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';
    }

});

CodePen — Demo — pause CSS Animation

纯 CSS 实现

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

hover 伪类实现

使用 hover 伪类,在鼠标悬停在按钮上面时,控制动画样式的暂停。
JS中文网 – 前端进阶资源分享 www.javascriptc.com 趣聊CSS系列

关键代码如下:

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

<style>
.stop:hover ~ .animation {
    animation-play-state: paused;
}
</style>

Demo — 纯 CSS 方式实现 CSS 动画的暂停与播放 (Hover)

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

checked 伪类实现

之前的文章也谈过,使用 radio 标签的 checked 伪类,加上 &lt;label for> 实现纯 CSS 捕获点击事情。

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

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

<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">JS中文网 – 前端进阶资源分享 www.javascriptc.com 趣聊CSS系列</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

DEMO — 纯 CSS 方式实现 CSS 动画的暂停与播放

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

当然,使用 :target 伪类选择器也能实现上面同样的效果,感兴趣的可以尝试一下。

JS中文网(www.javascriptc.com)是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区.

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文来源于网络,其版权属原作者所有,如有侵权,请与小编联系,谢谢!

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:【趣聊Css-10】纯 CSS 方式实现 CSS 动画的暂停与播放

链接:https://www.javascriptc.com/551.html

原文链接:https://github.com/chokcoco/iCSS/issues/12

« 【趣聊Css-11】奇妙的-webkit-background-clip: text 属性
【趣聊Css-09】大屏(盒子)端 CSS 动画性能提升研究»
Flutter 中文教程资源

相关推荐

QR code