马黑PHP整站系统

初识JS原生animate动画函数

位置: 首页 > 前端三套件[ 发布时间: 2024.6.6  作者: 马黑  阅读: 263 ]

很多人不认识 JS 原生动画函数,百度的AI也认为没有。其实不然,JS早就拥有 Web Animation API,提供两个接口,其中 animate 函数就是用来操控动画的。本文将通过制作一个可控的元素旋转对象初识 Web Animation API,具体做法是,使用 JS 原生 animate 函数驱动一个 img 元素,令其旋转并且可以对其进行播放暂停进行控制。

我们需要准备一下图片:

这张图片在后面的示例中需要一个 id ,id="h7",它是图片的标识,是我们后续操作这张图片的依据。animate 函数可以这样调用:h7.animate(/* 参数 */);。现在要做的事情是了解 animate 函数的参数——其实就是 animate 函数的语法:

element.animate(keyframes, options);

element 是要执行 animate 动画的元素,一般使用 id 标识,比如本文的图片标签 id h7,或通过 document.querySelector 等方法抓取到的元素标识。下面讨论重点问题,即两个参数:

keyframes 参数,顾名思义指关键帧动画,它是关键帧动画描述的对象集合,比如从 0 到 360deg 的旋转描述,用 JS 对象来表示:

{ transform: 'rotate(0)', /* 第一帧 */ transform: 'rotate(360deg)', /* 第二帧 */ }

CSS关键帧集合描述放在花括号 {} 内,这是JS对象的表示方法。这个内容块描述了动画的两个帧,起始帧旋转 0 度,结尾帧旋转 360 度,向 animate(参数1, 参数2) 函数传递参数1,告诉它给我运行一个动画,从 0 到 360deg 旋转元素。这个内容快就是 animate 函数所需的第一个参数,我们直接将其放置在 keyframes 参数的位置即可,当然,为了方便,我们还可以将动画描述集合储存为一个变量,后面的示例代码会呈现这一点。

options 参数是动画属性集合,包含但不限于动画运行周期、动画运行次数,也是使用 JS 对象存储:

{ duration: 8000, /* 动画持续时长,毫秒单位 */ iteration: 2, /* 动画运行次数,正整数,Infinity 为无限 */ }

同样地,将以上代码块放置到 animate(参数1,参数2) 参数2的位置,告诉 animate 函数,动画的运行属性值是这两个:8 秒钟一个运行周期、运行两次。

把这些代码整合一下,动画就可以运行了:

<img id="h7" alt="" width="200" src="https://638183.freep.cn/638183/web/svg/sunfl-2.svg" />   <script> h7.animate( { transform: 'rotate(0)', /* 第一帧 */ transform: 'rotate(360deg)', /* 第二帧 */ }, { duration: 8000, /* 动画持续时长,毫秒单位 */ iteration: 2, /* 动画运行次数,正整数,Infinity 为无限 */ } ); </script>

图片旋转两圈后自动停下来,不过这个停止动作不是我们控制的,是 iteration: 2 属性的限定。要控制 animate 函数的动画,我们需要拿到动画操作标识,然后通过这个标识控制动画。animate 函数和CSS关键帧动画一样,拥有动画的播放与暂停方法,详情请参阅本文演示示例的代码:

<img id="h7" alt="" width="200" src="https://638183.freep.cn/638183/web/svg/sunfl-2.svg" />   <script> //rot对象 :旋转动画描述(省略首帧) const rot = {     transform: 'rotate(360deg)', };   // rotAttr对象 :动画属性值列表 const rotAttr = {     duration: 8000,     iterations: Infinity, };   // 运行并获得动画操作入口 rotate const rotate = h7.animate(rot, rotAttr);   //图片单击事件 h7.onclick = () => {     rotate.playState === 'running' ? rotate.pause() : rotate.play(); }; </script>

playState 是动画的运行状态,主要是 running 和 paused 两种;同时,animate 动画拥有 play() 和 pause() 两种方法。以上代码,我们就是根据 playerState 状态调用不同的方法来实现对 animate 动画的控制。效果如下:

(点击图片可以控制动画)

小结:animate 是 JS 原生的动画函数,它源自 Web Animation API 接口,它需要两个参数,参数1是动画各帧的描述集合,用以描述动画的全程,参数2是动画属性值的描述集合,用以描述动画的运行周期(时长)、运行次数等,两个参数都是用 JS 对象表示,分别放置在在花括号内;animate 函数的动画与动画属性值的描述语法大致和CSS关键帧动画一样,但有自己的语法规范。animate 函数应由元素调用,元素标识.animate(参数1, 参数2);。而要控制动画,需要获得动画标识,动画标识 = 元素标识.animate();,然后可以使用 动画标识.play(); 播放动画、使用 动画标识.pause(); 暂停动画。动画的运行状态则通过 动画标识.playState 获得,状态一般是 running 或 paused(还有中间状态,这里不提)。

前一篇: 多彩流动边框演示
下一篇: JS原生animate动画函数之复合动画与缓动动画

发表评论:

       

评论列表 [1条]

#1 | 悄然 于 2024-6-6 12:44 发布: 这个教程可真是太细了,老师掰开了揉碎了一点一点讲,感觉JS动画好象有点轮廓了。。

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com