js控制DOM元素做动画animation

1,087 阅读1分钟

@keyframes方式

正常直接通过@keyframes定义动画,然后DOM通过animation调用动画既可以实现动画效果

<style>
    @keyframes move {
        0% {
            transform: translate(0, 0);
        }
        100% {
            transform: translate(1000px, 0);
        }
    }

    div {
        width: 100px;
        height: 100px;
        background-color: pink;
        /* 动画名称 */
        animation-name: move;
        /* 持续时间 */
        /* animation-duration: 2s; */
        /* 运动曲线 */
        /* animation-timing-function: ease; */
        /* 何时开始 */
        animation-delay: 1s;
        /* 重复次数  iteration 重复的 conut 次数  infinite  无限 */
        /* animation-iteration-count: infinite; */
        /* 是否反方向播放 默认的是 normal  如果想要反方向 就写 alternate */
        /* animation-direction: alternate; */
        /* 动画结束后的状态 默认的是 backwards  回到起始状态 我们可以让他停留在结束状态 forwards */
        /* animation-fill-mode: forwards; */
        /* animation: name duration timing-function delay iteration-count direction fill-mode; */
        /* animation: move 2s linear 0s 1 alternate forwards; */
        /* 前面2个属性 name  duration 一定要写 */
        /* animation: move 2s linear  alternate forwards; */
    }

    div:hover {
        /* 鼠标经过div 让这个div 停止动画,鼠标离开就继续动画 */
        animation-play-state: paused;
    }
</style>

JS控制DOM元素做动画

为元素设定animate属性:关键帧与属性两部分

```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./promise.js"></script>
    <style>
        div {
            position: absolute;
            top: 200px;
            width: 265px;
            height: 265px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div>
    </div>
    <script>
        var div = document.querySelector('div')
        div.onclick = function () {
            this.animate(
                [  //关键帧(数组包裹对象)
                    {transform: 'translateX(0)'},     // 第一帧
                    {transform:'translate(200px, -50%)',opacity:'.8'},   // 第二帧
                    {transform:'translate(400px, 500px)',opacity:'.5'}, // 第三帧
                ],
                {
                    duration: 1000,  //  动画时长  (单位毫秒)
                    iterations: Infinity,  //  重复次数  (无限循环:Infinity)
                    fill:'backwards',  //结束时不复位
                    delay:0,   // 设置动画延迟时长 (单位毫秒)
                    easing:'linear'  //设置动画 运动速率  (linear: 匀速)
                },
            )
        }
    </script>
</body>
</html>
```