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

html-css08

如何用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)

通过按钮的click事件反复触发一个元素的css3动画,点击一次,动画效果就跑一次。

看码——

html:

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>测试页面</title>

<script id="jquery_183" type="text/javascript" src="//runjs.cn/js/sandbox/jquery/jquery-1.8.3.min.js"></script>

</head>

<body>

    <div id="testDiv01">

    </div>

    <button id="testBtn01">反复触发transition</button>

    <br>

    <div id="testDiv02">

    </div>

    <button id="testBtn02">反复触发animation</button>

</body>

javascript:

let [testDiv01,testDiv02,testBtn01,testBtn02]=[$('#testDiv01'),$('#testDiv02'),$('#testBtn01'),$('#testBtn02')]

testBtn01.on('click',function () {

        testDiv01.addClass('transi')

        let t = setTimeout(()=>{

            testDiv01.removeClass('transi')

            clearTimeout(t)

        },500)

})

testBtn02.on('click',function () {

        testDiv02.addClass('ani')

        let t = setTimeout(()=>{

            testDiv02.removeClass('ani')

            clearTimeout(t)

        },500)

})

css:

body {

  padding: 20px

}

.testDiv {

  width: 100px

  height: 100px

  border-radius: 50%

  background-color: #e0a718

}

.testDiv.ani {

  -webkit-animation: pop 200ms ease 0ms

          animation: pop 200ms ease 0ms

}

.testDiv.transi {

  -webkit-transform: scale(1.2)

          transform: scale(1.2)

  -webkit-transition: -webkit-transform 0.5s

  transition: -webkit-transform 0.5s

  transition: transform 0.5s

  transition: transform 0.5s, -webkit-transform 0.5s

}

.testBtn {

  margin-top: 20px

  height: 30px

  padding: 0px 10px

  border: 1px solid #CCCCCC

}

@-webkit-keyframes pop {

  0% {

    -webkit-transform: scale(0)

            transform: scale(0)

  }

  50% {

    -webkit-transform: scale(1.2)

            transform: scale(1.2)

  }

  100% {

    -webkit-transform: scale(1)

            transform: scale(1)

  }

}

@keyframes pop {

  0% {

    -webkit-transform: scale(0)

            transform: scale(0)

  }

  50% {

    -webkit-transform: scale(1.2)

            transform: scale(1.2)

  }

  100% {

    -webkit-transform: scale(1)

            transform: scale(1)

  }

}