如何重复制作 SVG 场景的动画?

问题描述 投票:0回答:1

当我按下太阳时,我创建了一个带动画的 SVG 风景。然而动画只能运行一次,之后就不再运行了。

这是我现有的 JS 代码。

const sun = document.getElementById("sun");
const stage = document.getElementById("stage");

sun.addEventListener("click", function() {
  sun.style.animationPlayState = "running";
  stage.style.animationPlayState = "running";
});

sun.addEventListener("animationend", function() {
  // Reset sun position to its initial values
  sun.setAttribute("cx", "700");
  sun.setAttribute("cy", "100");
  // Set animation state to paused for both sun and stage

  sun.style.animationPlayState = "paused";
  stage.style.animationPlayState = "paused";
});
javascript css animation
1个回答
0
投票

有一篇关于此的文章,您可以在此处阅读重新启动 CSS 动画。据我了解,问题在于 CSS 没有能力在动画播放后重新启动动画。

除了文章中给出的解决方案之外,我发现这可以重置动画,这样当您再次单击太阳时,它会重新执行动画。

<html>
    <style>
        @keyframes move-left {
            0% {
                left: 0;
            }
            100% {
                transform: translateX(100px);
            }
        }
        .animation {
            animation: move-left 1s ease-in backwards;
            animation-play-state: paused;
        }
        #sun {
            position: absolute;
            width: 40px;
            background: red;
        }
    </style>
    <body>
        <div id="sun">.</div>
    </body>
    <script>
        const sun = document.getElementById("sun");
        const stage = document.getElementById("stage");

        sun.addEventListener("click", function () {
            sun.classList.add("animation");

            sun.style.animationPlayState = "running";
            stage.style.animationPlayState = "running";
        });

        sun.addEventListener("animationend", function () {
            // Reset sun position to its initial values
            sun.setAttribute("cx", "700");
            sun.setAttribute("cy", "100");
            // Set animation state to paused for both sun and stage
            sun.classList.remove("animation");
        });
    </script>
</html>

通过添加一个类

onclick
,然后删除
animationend
上的类,无论您通过单击该元素“重新启动”多少次,动画都会正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.