Element.animate结合了CSS动画的性能优势与JavaScript的灵活控制,适合需要交互和动态调整的复杂动画场景。

Element.animate
要使用
Element.animate
animate()
keyframes
options
keyframes
// 示例1: 数组形式的关键帧
const element = document.getElementById('myElement');
element.animate(
[
{ transform: 'translateX(0)', opacity: 1 }, // 0% 状态
{ transform: 'translateX(100px)', opacity: 0.5 }, // 50% 状态
{ transform: 'translateX(200px)', opacity: 1 } // 100% 状态
],
{
duration: 1000, // 动画持续时间1秒
easing: 'ease-in-out', // 缓动函数
fill: 'forwards', // 动画结束后保持最终状态
iterations: Infinity // 无限循环
}
);
// 示例2: 对象形式的关键帧 (更适合简单的 from/to 动画或多个属性)
element.animate(
{
transform: ['scale(1)', 'scale(1.2)', 'scale(1)'], // 从1到1.2再到1
backgroundColor: ['red', 'blue', 'red']
},
{
duration: 1500,
easing: 'linear',
iterations: 2 // 播放两次
}
);options
duration
easing
delay
fill
iterations
@keyframes
立即学习“Java免费学习笔记(深入)”;
animate()
Animation
play()
pause()
reverse()
finish()
cancel()
commitStyles()
fill: 'forwards'
animation.onfinish
animation.oncancel
const myAnimation = element.animate(
[{ opacity: 0 }, { opacity: 1 }],
{ duration: 500 }
);
// 动画播放完成后执行
myAnimation.onfinish = () => {
console.log('动画播放完毕!');
// 此时可以执行一些后续操作,比如移除元素或触发下一个动画
myAnimation.commitStyles(); // 将最终样式应用到元素上
myAnimation.cancel(); // 确保动画对象不再活跃,但样式已固定
};
// 按钮点击暂停
document.getElementById('pauseButton').addEventListener('click', () => {
myAnimation.pause();
});
// 按钮点击反转
document.getElementById('reverseButton').addEventListener('click', () => {
myAnimation.reverse();
});这种基于
Animation
选择
Element.animate
首先,对于那些简单的、声明式的、不需要太多交互的 UI 动画,比如按钮的
:hover
然而,一旦动画需求变得复杂,需要动态计算、用户交互驱动、或者涉及多个动画的编排和同步时,CSS 动画的局限性就显现出来了。比如,一个拖拽手势驱动的元素移动,或者一个根据用户滚动位置改变速度和方向的视差效果,再或者一个需要精确暂停、快进、倒退的自定义播放器进度条动画,这些场景下,
Element.animate
Element.animate
playbackRate
currentTime
Element.animate
性能方面,虽然很多人觉得 JS 动画不如 CSS 动画,但
Element.animate
transform
opacity
总结一下,如果动画是静态的、简单的、无交互的,并且性能是首要考虑,那就用 CSS 动画。如果动画是动态的、复杂的、需要精细控制和交互的,那么
Element.animate
Element.animate
Animation
Element.animate
最直观的控制当然是
play()
pause()
reverse()
currentTime
playbackRate
currentTime
const animation = element.animate(
[{ transform: 'translateX(0px)' }, { transform: 'translateX(200px)' }],
{ duration: 2000, fill: 'forwards' }
);
animation.pause(); // 先暂停,等待用户控制
const slider = document.getElementById('animationSlider');
slider.max = animation.duration; // 滑块最大值设为动画时长
slider.addEventListener('input', (event) => {
animation.currentTime = event.target.value; // 根据滑块值设置动画当前时间
});
// 你甚至可以根据用户滚动事件来改变 currentTime,实现滚动视差动画
window.addEventListener('scroll', () => {
const scrollProgress = window.scrollY / (document.body.scrollHeight - window.innerHeight);
animation.currentTime = animation.duration * scrollProgress;
});通过
currentTime
另一个强大的属性是
playbackRate
1
2
0.5
-1
// 鼠标进入元素时加速动画,移出时恢复正常
element.addEventListener('mouseenter', () => {
animation.playbackRate = 2; // 加速
animation.play(); // 确保正在播放
});
element.addEventListener('mouseleave', () => {
animation.playbackRate = 1; // 恢复正常速度
});除了这些,
Animation
animation.ready
delay
animation.finished
fill: 'forwards'
onfinish
animation.finished.then(() => {
console.log('动画已经完全结束并固定了最终状态。');
// 可以在这里触发下一个动画,或者执行一些清理工作
}).catch(() => {
console.log('动画被取消了。');
});这些属性和方法共同构成了
Animation
尽管
Element.animate
首先,浏览器兼容性是老生常谈的问题。虽然现代浏览器对 Web Animations API 的支持已经相当不错,但如果你需要支持一些老旧的浏览器(比如 IE 或者某些版本的 Safari),那么
Element.animate
web-animations-js
// 如果需要兼容性,可能需要引入 polyfill // import 'web-animations-js'; // 或通过 CDN 引入
其次,关于 fill
commitStyles()
fill: 'forwards'
fill: 'forwards'
commitStyles()
onfinish
commitStyles()
const anim = element.animate(
[{ transform: 'translateX(0)' }, { transform: 'translateX(100px)' }],
{ duration: 1000, fill: 'forwards' }
);
anim.onfinish = () => {
anim.commitStyles(); // 确保 translateX(100px) 成为元素的实际样式
anim.cancel(); // 此时动画对象可以安全地被取消,因为样式已固定
};再来是 性能考量,虽然我前面提到
Element.animate
transform
translate
scale
rotate
opacity
width
height
top
left
background-color
最后,与 CSS transition
Animation
Element.animate
Element.animate
Element.animate
这些挑战并非不可逾越,但了解它们能帮助我们更好地规划和实现动画,避免在项目后期才发现问题,从而提升开发效率和动画的稳定性。
以上就是如何通过JavaScript的Element.animate实现原生动画,以及它对比CSS动画的控制灵活性有哪些?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号