如何用js使得一个已经结束的css的animation动画重新执行一遍

html-css013

如何用js使得一个已经结束的css的animation动画重新执行一遍,第1张

可以试试移除动画的类再重新给节点添加动画的类

下面这个demo是执行一次动画,2s后再重新执行一遍

(因为是demo,我就没有考虑兼容性问题,没有添加css前缀)

1

<div class="dot anm" id="anm"></div>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

.dot {

position: relative

width: 100px

height: 100px

margin: 100px

border-radius: 50%

background: #000

}

.anm {

animation: move 1s forwards

}

@keyframes move

{

from {

left:0px

}

to {

left:200px

setTimeout(function() {

var dom = document.getElementById('anm')

dom.className = 'dot'

setTimeout(function() {

dom.className = 'dot anm'

}, 10)

}, 2000)

当我们给元素添加Animation后,动画总是现在元素的初始位置显示一下,然后再跳到动画的起始位置播放,这样的话会很难看。

解决方法:

使用animation-fill-mode:forwards属性

forwards参数意思为 元素将在动画延迟结束后 初始位置显示在 动画关键帧的最后一帧定义的位置

backwards参数意思为 元素将在动画延迟结束后 初始位置显示在 动画关键帧的第一帧定义的位置

上边样式的将变现为,class为phone的元素会在加载完成后,从它的定义位置靠下5rem开始动画。

js中赋值nimation-fill-mode:forwards的方法:

object .style.animationFillMode=none | forwards | backwards | both