孤陋寡闻了,才知道已经可以用 JS 来控制 CSS 动画了

通过JavaScript调用CSS动画 通过JavaScript调用CSS动画案例一:通过按钮开始和停止动画案例二:通过定时器停止动画 案例一:通过按钮开始和停止动画 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .animation { animation: move 2s infinite alternate; bor 阅读详情

最近翻 MDN 突然发现一套叫 Web Animations API 的东东,点进去看才知道,原来是一套控制 css animation 的 API,而且已经有段时间了 🤦‍♂️,而我居然一直不知道。

介绍

Web Animations API 主要包含两个 API:animate 来执行动画,getAnimations 来获取当前元素的动画。

并且 getAnimations 不止可以获取到 animate 创建的动画,css 中的动画同样可以获取到。

getAnimations

先来个小 Demo:

如上 Demo 所示,通过 getAnimations 我们可以获取到当前元素的正在运行的动画的 Animate 对象,如果传入参数 {subtree: true} 还能获取到包括其所有子元素、伪元素的动画。

通过拿到的 animate,我们可以直接对其进行各种操作,如:

  • pause - 暂停动画
  • play - 播放动画
  • cancel - 取消动画状态
  • reverse - 反向执行动画到开始状态
  • finish - 直接跳到动画结束阶段

此外还有一些其他比较少用的方法,如 commitStyles、persist 等。

通过上述 API,我们可以轻易的通过 JS 来控制动画的执行,而不需要像以前一样通过改写 CSS 样式来控制。

除了上述的一些操作方法外,animate 中还有很多动画的属性,包括运行状态的 Promise、timeline、effect 等。

其中如 finished 等 Promise 在动画控制时也很好用,比如创建一个动画后需要在动画完成后做一些处理直接 await finished 即可,不需要像以前一样监听 dom 状态或是设定倒计时。

其它需要了解的可以点击这里查看。

animate

animate 方法则可通过 JS 给元素添加动画:Element.animate(keyframes, options)

anim.animate([{ transform: 'translateX(0)' }, { transform: 'translateX(100px)' }, { transform: 'translateX(0)' }],1000
); 

这里的 keyframes 是一个数组,不同于 css keyframes,这里不需要定义每一个关键帧的百分比,此处会默认按照等比拆分关键帧,如果需要定义百分比,可直接在关键帧中添加 offset 参数:

anim.animate([{ transform: 'translateX(0)' }, { transform: 'translateX(100px)', offset: 0.3 }, { transform: 'translateX(0)' }],1000
); 

此处 keyframe 参数主要包含两种属性,第一种是对应的 css 属性的 js 表示,如 left、paddingLeft、transform 等(注意此处 css 中的 float、offset 需要写成 cssFloat、cssOffset),第二种是上面说到的 offset 一类的通用控制参数,除了 offset 外,还可设置 easing 为每个关键帧设定动画曲线:

anim.animate([{ opacity: 1, easing: 'ease-out' }, { opacity: 0.1, easing: 'ease-in' }, { opacity: 0 }], 1000); 

以及 composite 参数来控制动画合成方式。

此外,keyframes 还支持第二种格式:

anim.animate({opacity: [0, 0.9, 1],offset: [0, 0.8], // Shorthand for [ 0, 0.8, 1 ]easing: ['ease-in', 'ease-out']},1000
); 

可直接传入一个对象,将对象中的属性通过数组表示来表示对应的关键帧。

options 则可以直接传入数字,代表动画事件或是传入动画参数:

anim.animate([{ transform: 'translateX(0)' }, { transform: 'translateX(100px)' }, { transform: 'translateX(0)' }], {duration: 1000
}); 

参数和 CSS 中差不多,包括:

  • delay - 动画延迟
  • direction - 动画运行方向
  • duration - 动画运行时间
  • easing - 动画运行曲线
  • endDelay - 动画结束后的延迟
  • fill - 动画完成后的填充
  • iterations - 动画重复次数
  • composite - 动画合成

此外还有 iterationStart、iterationComposite,需要了解可点击查看。

兼容和 polyfill

当然,该系列 API 兼容并不佳,要能够完整体验需要至少 chrome 84 以上版本,IE 则完全没戏。

不过还好有 polyfill 的存在:web-animations-js

总结

通过 Web Animations 系列 API 可以方便的控制已有的 CSS 动画、添加动画等,而不需要像以前一样使用 JS 来模拟动画,在某些特定场景下可以提高动画性能、简化动画代码。

都到看这了真不打算不点个赞吗 🐶

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

【JavaScript-动画原理】如何使用js进行动画效果的实现 利用js实现动画效果 阅读详情

相关推荐

使用JavaScript控制CSS3关键帧动画

在网页开发中,CSS3关键帧动画是一种强大的工具,可以创建各种各样的动画效果。通过JavaScript,我们可以动态地控制CSS3关键帧动画,实现更加复杂和交互性的动画效果。通过这些方法,我们可以在JavaScript中实现对CSS3关键帧动画的控制和修改。在上面的代码中,我们定义了一个类名为"box"的div元素,并为它添加了一个CSS动画。首先,让我们创建一个简单的HTML页面,其中包含一个带有动画效果的元素。例如,我们可以通过改变关键帧的颜色值,来实现动画颜色的变化。要改变动画的速度,我们可以使用。

CodeWhizZ的博客 562

冷门API,JS控制css动画——前端动画的一种方式

实验性API ,Animation,使用js来控制CSS动画

qq_42780885的博客 1634

支持找回微信删除好友!一款人人可用的全能微信数据分析工具

找回删除好友、查看删除记录、恢复聊天信息....

1725

使用JavaScript控制CSS Animations(动画)

当你想在动画执行过程中暂停,并且接下来让动画接着执行。这时CSS的animation-play-state属性是非常有用的。

Zeb的博客 1535

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 279

基于新张量核范数的TRPCA:多维数据低秩稀疏分解的理论与实践

本文深入探讨了基于新张量核范数的TRPCA(张量鲁棒主成分分析)技术。该技术通过t-product运算和新定义的张量核范数,能有效从多维数据(如视频、彩色图像)中分离低秩背景与稀疏前景/噪声。文章结合理论、核心算法(ADMM、t-SVT)及图像恢复、视频背景建模等实战案例,展示了其在处理复杂多维数据分解任务中的强大优势。

weixin_29173777的博客 269

✿✿✿JavaScript基本语法一

1.js的发展史(闲聊版)2.浏览器分成两部分:渲染引擎和 JS 引擎3.js与html的关系以及结合方式(1)js与html的关系(2)js与html结合方式4.JavaScript注释5.js中的基本数据类型6.js中的变量7.运算符(自动类型转换)(1)算数运算符:++ -- +(正) -(负) + - * / %(2)比较运算符:> = 8.JavaScript输入输出语句9.九九乘法表(js版本)

naoguoteng的博客 734

ArduPilot代码解析之四 — 姿态和位置控制

ArduPilot采用级联控制架构实现飞行器的姿态和位置管理。该系统通过位置→速度→加速度→姿态→角速率→电机指令的逐级转换,将高级指令转化为底层执行信号。位置控制采用三维独立控制,水平轴与垂直轴分别处理;姿态控制通过角度误差→角速率→电机输出的两层级联实现。系统支持多种输入模式,并内置运动学整形功能确保轨迹平滑。不同飞行器类型(多旋翼、直升机、潜艇等)有专门的调参方案,通过调整PID参数、加速度限制等实现最优控制性能。该架构兼顾控制精度与飞行稳定性,适用于各类自主飞行场景。

rainercool的专栏 824

记我的一次腾讯外包面试

(括号里的内心独白) 1.vue相比jQuery的优点(我项目经验有jQuery和vue) 2.js数据类型有哪些(我惊了竟然问我这个???) 3.怎么隐藏div 4.position的属性有哪些,fixed怎么用呀这个在页面上什么效果描述一下 5.jquery用的什么连接后台数据?你的这个ajax是进行封装了吗?(我没答上来,当是我同事写的,我回头看看) 6.axios你是怎么实现下载功能的(我当时网上找的,我没记,我是垃圾) 7.axios你讲一讲请求拦截和响应拦截 8.你是怎么实现vue导航切换显示不

青椒的博客 1487

基于STM32的频率计(采用外部中断的方式)

前言 最近在了解电赛相关的东西,和指导老师交流一下,我决定先从最简单的频率计做起。 频率计是来检测信号的频率的,在做频率计的时候可以用信号发生器发出的信号来进行测试。 原理 这是最基础的方波,我们可以通过检测上升沿的方式来测量其频率。从周期的角度出发连续两个上升沿的时间就是这个方波的周期,那这个周期分之一就是这个方波的频率了。 在思考了一段时间~~(我是萌新。。)~~ 我觉得有两个方法可以实现,第一个是采用stm32定时器的输入捕获功能,第二个就是用外部中断来实现这个功能。正如标题,我这次采用外部中断的方

qq_45784922的博客 6171

Halcon-AOI外观缺陷检测系列

Halcon-AOI外观缺陷检测系列

Jumy_S的博客 1664

关于如何在 js 中操作 css 动画的问题,即动态修改 css 动画

方法一:js 操作animation css 中使用动画,会先定义一个@keyframes 在@keyframes里指定 css 样式,动画将在特定事件内逐渐从当前样式更改为新样式。 css 使用动画 第一步:定义动画变化的样式 @keyframes example { from {background-color: red;} to {background-color: yellow;} } @keyframes test { 0% {background-color: red;} 100

thirteen_king13的博客 1万+

AI自动化流程在金融风控中的3个典型案例

AI自动化风控流程全流程自动化:最小化人工干预,实现从数据输入到决策输出的闭环自适应学习:通过持续数据反馈实现模型自动迭代优化实时决策能力:满足毫秒级(支付风控)至分钟级(信贷审批)的响应需求多模态数据融合:整合结构化、非结构化和实时流数据智能决策解释:自动生成符合监管要求的决策解释人机协同机制:在高风险场景下实现AI与人类专家的协同决策实施后关键绩效指标(KPI)变化指标实施前实施后改进幅度平均审批时间3.2天4.7分钟-99.7%自动审批率15%85%+467%

架构师的AI之路,分享AI应用开发架构的学习与实践。 1535

通过 js 给元素添加动画样式animation属性 ,以及 perspective 属性探究

使用 js 给元素添加动画 , 同时探究C3属性 perspective

shaoyahu的博客 7411

【数据湖仓】:Iceberg、Hudi 和 Paimon 对比

适用于需要多计算引擎支持和复杂查询的离线批处理场景。其中立性和灵活性使其成为构建新型数据平台的理想选择。:在需要高频数据更新和高效小文件管理的场景中表现出色,适合实时数据处理和增量数据更新的业务需求。:专为实时流式数据处理设计,适用于对数据实时性要求高的业务场景,如实时数据分析和实时指标监控。通过以上分析,可以看出 Apache Iceberg、Apache Hudi 和 Apache Paimon 各有其独特的优势和适用场景。企业应根据自身业务需求和技术栈选择合适的数据湖仓方案,以充分发挥其价值。

欢迎来到我的博客,一起探索代码里的世界! 1607

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

html 清除animation,jq中stop()方法停止不了css中animation

css动画和jquery动画基本上是两套东西,jquery的stop只能停止jquery的动画(至于为什么不能停你得了解js动画原理)你的需求是没法用css动画实现的,控制不了那么细,得完全用js动画查了下mdn,好像火狐上有些api可以控制css动画以下代码仅火狐可用,且在about:config中开启dom.animations-api-getAnimations.enabled和dom.an...

weixin_39937312的博客 446

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

js-控制css3动画暂停播放、暂停继续播放

animation-play-state CSS 属性定义一个动画是否运行或者暂停。可以通过查询它来确定动画是否正在运行。另外,它的值可以被设置为暂停和恢复的动画的重放。恢复一个已暂停的动画,将从它开始暂停的时候,而不是从动画序列的起点开始在动画。// animationPlayState 为paused时暂停。// animationPlayState 为空时继续播放。

qq_45458749的博客 4649

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

10-animation

动画 ​ 由于该技术的规范还没有稳定,在使用前要先确保浏览器对其兼容性。 Animations是css3的一个模块,使用keyframes定义如何随着时间的移动改变CSS的属性值,可以通过指定它们的持续时间,重复次数,如何重复来控制关键帧的行为。Animations由两部分组成:css动画的配置,以及一系列的keyframes(用来描述动画的开始、过程、结束状态)。不需要了解任何Js技术即可完成动画的制作 -过渡和动画之间的异同 1.1不同点 过渡必须人为的触发才会执行动画 动画不需要人为的触发就可以

冰霜的博客 588

使用CSS和JavaScript实现动画效果

选择使用CSS动画或JavaScript动画通常取决于应用的需求和复杂性。对于简单、可复用的效果,CSS动画是一个很好的选择。而需要动态和复杂交互的效果,JavaScript动画提供了更大的灵活性。熟练掌握这两种技术,可以帮助开发出更具吸引力和活力的Web应用。

I'm兰陵王的博客 992

使用 web-animations-js 的指南

**web-animations-js** 是一个JavaScript库,它为浏览器提供了一个API来驱动网页上的动画内容。这个库统一了SVG和CSS的动画特性,使得开发者可以更便捷地进行页面元素的动画操作。 ## 1. 项目目录结构及介绍 以下是 `web-animations-js` 的核心目录结构: - **dist** - 包含编译后的库文件,如 `web-animations.mi

gitblog_00602的博客 1074

js和css实现动画

js实现动画 1、实现方式 requestAnimationFrame:将执行动画的每一步传到requestAnimationFrame中,在每次执行完后进行异步回调来连续触发动画效果。 setTimeout和setInterval+css改变(导致页面频繁性重排重绘,消耗性能) 2、优点: JavaScript动画控制能力很强, 可以在动画播放过程中对动画进行控制:开始、暂停、回放、终止、取消都是可以做到的。 动画效果比css3动画丰富,有些动画效果,比如曲线运动,冲击闪烁,视差滚动效果,只有JavaS

程序媛的梦工厂 511

用js控制css的animation动画的小想法

之前写作业想要实现通过点击触发animation动画的效果。理论上可以用js修改css达到目的,不过我不晓得怎样修改keyframes里的内容,在网上也没找到合适的方法。一开始我的思路是写两份css,一份初始状态,一份是点击之后需要显示的效果,但在实际操作中发现如果直接替换css的话,动画效果并不会出现,只能显示动画结束时的状态。所以后面我改变了做法,不改变文件,而是改变css代码块。简单来说就是对同一内容写两份不同的css代码块,通过更换class的值达到修改css的效果。 实例: html &l

JiHejun的博客 2630

利用js动态控制animation动画

一般我们写css3 animation动画的时候都是把它们定死在某个值不能改变,其实在js中是有相应的对象可以达到动态控制keyframes关键帧的目的举个例子: 这个表盘效果,客户需要指针每个月根据数值做出动态变化<div class="page page7"> <h4 class="element p7-1">销售费用</h4> <p class="hidden-text

cztflove的博客 5万+

js控制动画

效果如下: 代码如下(可以直接复制在本地观看效果): <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

北枫林 840

JS实现网页动画

JS实现网页动画、核心原理、封装函数、简单例子、测导航案例、导航筋斗云案例

benlalagang的博客 2927
上一篇: 动手实现一个跑步小程序
下一篇: 基于elementUI封装了基础表单组件
梅花十三儿
博客等级 码龄5年 1038粉丝 444原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值