You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JavaScript触发的CSS动画支持按钮多次点击运行?

解决点击按钮重复触发CSS动画的问题

问题出在:第一次点击给元素添加了logo-animate类,动画执行完毕后这个类依然保留在元素上。CSS动画只会在类首次添加到元素时触发,后续重复添加同一个类不会重新执行动画。

下面提供两种可行的修改方案:

方案一:点击时强制重置动画类

利用浏览器重绘机制,先移除动画类,再触发重绘后重新添加类,确保每次点击都能启动新的动画循环。修改后的JavaScript代码:

document.getElementById('LogoContainer').addEventListener('click', function() {
    var c = document.getElementsByClassName('logo-rec');
    for (var i = 0; i < c.length; i++) {
        // 先移除动画类
        c[i].classList.remove('logo-animate');
        // 读取元素属性强制浏览器重绘,避免同步操作不生效
        void c[i].offsetWidth;
        // 重新添加动画类,触发动画
        c[i].classList.add('logo-animate');
    }
})

方案二:动画结束后自动移除类

给元素绑定动画结束事件,动画执行完成后自动移除logo-animate类,下次点击时元素无此类,添加后即可重新触发动画。修改后的JavaScript代码:

// 提前绑定动画结束事件
var c = document.getElementsByClassName('logo-rec');
for (var i = 0; i < c.length; i++) {
    c[i].addEventListener('animationend', function() {
        this.classList.remove('logo-animate');
    });
}

// 点击按钮触发动画
document.getElementById('LogoContainer').addEventListener('click', function() {
    var c = document.getElementsByClassName('logo-rec');
    for (var i = 0; i < c.length; i++) {
        c[i].classList.add('logo-animate');
    }
})

方案对比

  • 方案一:不管上一次动画是否完成,点击就强制重启动画,适合需要即时响应点击的场景;
  • 方案二:遵循动画自然流程,只有上一次动画结束后,下次点击才会启动新动画,避免动画叠加混乱。

你的HTML和CSS代码无需修改,任选一种方案替换原有JavaScript代码即可实现重复点击触发动画的效果。

内容的提问来源于stack exchange,提问作者MC Squared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:45:48