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

如何强制CSS元素动画从上一次动画结束的位置开始播放

问题根因

CSS动画的触发规则是:只有当animation属性的值发生变化时,浏览器才会重新执行动画流程。你连续两次为元素设置完全相同的动画配置(比如两次都是E 2s ease-in-out forwards),浏览器会判定动画没有变更,直接跳过过渡过程应用动画最终状态,就会出现元素瞬间跳转的问题。

同时你原代码中给left、top赋值时没有加px单位,部分浏览器可能会识别失败导致位置偏移,也建议同步修复。

修复方案

在设置新的动画配置前,先清空原有动画属性,强制触发浏览器重排后再赋值新的动画配置即可。

修改后的nextPulseAnimate函数代码如下:

function nextPulseAnimate() {
    pulse++;
    for(var index = 0; index < units.length; index++) {
    
        var unit = units[index];
        var direction = unit.moves[pulse-1]
        
        var unitElement = document.getElementById(unit.name);

        unitElement.style.left = unit.start.x + 'px'; // 补全单位避免兼容性问题
        unitElement.style.top = unit.start.y + 'px';

        // 新增两行代码修复同方向动画不触发问题
        unitElement.style.animation = 'none';
        void unitElement.offsetWidth; // 读取offsetWidth强制触发浏览器重排

        unitElement.style.animation = direction + " 2s ease-in-out forwards";
    }

    for(var index = 0; index < units.length; index++) {
        var unit = units[index];
        var direction = unit.moves[pulse-1]
            
        switch (direction){
         case "N":
             unit.start.y -= 60; 
             break;
         case "E": 
             unit.start.x += 60;
             break;
         case "S":
             unit.start.y += 60;
             break; 
         case "W": 
             unit.start.x -= 60;
             break;
         }
    }
}

内容的提问来源于stack exchange,提问作者Andrew Brew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:54:04