### JavaScript 中动画制作方法 `animate()` 属性
在JavaScript中,`animate()` 是一个强大的DOM元素方法,用于创建和控制动画,它提供了一种简便的方式来实现复杂的动画效果,而无需借助CSS或第三方库,以下是对`animate()`属性的详细介绍:
#### 一、基本概述
**定义**:`animate()` 是所有DOM元素都具备的方法,用于创建和应用动画。
**作用**:通过关键帧和动画属性设置,实现元素的过渡动画和关键帧动画。
#### 二、语法结构
“`javascript
Element.animate(keyframes, options);
“`
**参数说明**:
`keyframes`: 关键帧对象数组或单个关键帧对象,每个关键帧对象包含CSS属性及其值。
`options`: 动画属性设置对象,包括持续时间、迭代次数、延迟等。
#### 三、关键帧(Keyframes)
**单个关键帧**:
“`javascript
element.animate(
{ transform: ‘rotate(360deg)’ },
{ duration: 1000, iterations: Infinity }
);
“`
**多个关键帧**:
“`javascript
element.animate(
[
{ transform: ‘translate3d(0px, 0px, 0)’, opacity: ‘1’ },
{ transform: ‘translate3d(50px, 0px, 0)’, opacity: ‘.8’ },
{ transform: ‘translate3d(150px, 100px, 0)’, opacity: ‘.5’ }
],
{ duration: 1000, iterations: 1 }
);
“`
#### 四、动画属性设置(Options)
| 属性名 | 描述 |
|||
| `duration` | 动画时长(毫秒),默认为0,表示不运行动画。 |
| `iterations` | 重复次数,默认为1,`Infinity`表示无限循环。 |
| `fill` | 结束时复位,可选值为`none`, `forwards`, `backwards`, `both`,默认为`none`。 |
| `delay` | 动画开始前的延迟时间(毫秒),默认为0。 |
| `easing` | 动画速率,可选值为`linear`, `ease`, `easein`, `easeout`, `easeinout`等,默认为`linear`。 |
| `direction` | 动画方向,可选值为`normal`, `reverse`, `alternate`, `alternatereverse`,默认为`normal`。 |
| `endDelay` | 动画结束后的延迟时间(毫秒),主要用于与其他动画排序,默认为0。 |
| `iterationStart` | 描述动画应在迭代中的哪个点开始,0.5表示在第一次迭代的中途开始,默认为0.0。 |
| `composite` | 确定如何在此动画和其他未指定其自身特定复合操作的单独动画之间组合值,默认为`replace`。 |
| `pseudoElement`| 包含伪类选择器的字符串,::before”,如果存在,则效果将应用于目标元素的伪元素而不是目标元素本身。 |
#### 五、Animation对象的属性和方法
**属性**:
`finished`: 动画完成后返回的Promise。
`ready`: 动画开始时返回的Promise。
`oncancel`: 动画取消事件。
`onfinish`: 动画完成事件。
`onremove`: 动画移除事件。
`playState`: 动画播放状态。
`id`: 动画的唯一标识符。
**方法**:
`cancel()`: 取消动画。
`finish()`: 完成动画。
`pause()`: 暂停动画。
`play()`: 播放动画。
`reverse()`: 反转动画。
#### 六、浏览器兼容性
`animate()` API较新,属于实验特性,传统的浏览器支持并不友好,所有IE浏览器和低版本浏览器不支持此API。
### 七、案例分析
#### 案例1:旋转动画
“`html
var box = document.getElementById("box");
box.animate(
{ transform: 'rotate(360deg)' },
{ duration: 1000, iterations: Infinity, easing: 'linear' }
);
“`
#### 案例2:移动动画
“`html
var box = document.getElementById("box");
box.animate(
[
{ transform: 'translate3d(0px, 0px, 0)', opacity: '1' },
{ transform: 'translate3d(50px, 0px, 0)', opacity: '.8' },
{ transform: 'translate3d(150px, 100px, 0)', opacity: '.5' }
],
{ duration: 1000, iterations: 1, delay: 0, easing: 'linear', fill: 'forwards' }
);
“`
### 八、相关问题与解答
**问题1:如何在动画结束后执行某些操作?
**答案**:可以使用`Animation`对象的`finished`属性,它是一个Promise,当动画完成时解析,可以通过链式调用来执行后续操作。
“`javascript
element.animate(…).finished.then(() => {
console.log(‘动画完成’);
});
“`
**问题2:如何取消正在进行的动画?
**答案**:可以使用`Animation`对象的`cancel()`方法来取消动画。
“`javascript
var animation = element.animate(…);
animation.cancel(); // 取消动画
“`
小伙伴们,上文介绍了“javascript 中动画制作方法 animate()属性”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。