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

如何实现lottie-web动画逐次播放,前一个完成后再触发下一个?

lottie-web 顺序逐个播放动画解决方案

问题说明

原代码使用同步遍历的方式调用lottie.play(),遍历逻辑不会等待动画播放完成就会执行下一轮,因此所有动画会同时触发,不符合顺序播放的要求。

核心实现逻辑

用索引指针记录当前播放位置,把下一个动画的播放触发逻辑绑定到当前动画的onComplete事件上,只有当前动画播放完成后才会启动下一个动画。你提问中提到的「是否需要单独注册每个动画的相关事件」的问题,答案是需要,但不需要手动逐个编写绑定逻辑,通过批量循环即可完成。

完整可运行代码

// 收集所有step节点
const steps = $('.step').toArray();
// 存储所有lottie实例,提前初始化避免播放时加载JSON产生延迟
const lottieInstances = [];
// 标记当前播放的动画索引
let currentPlayIndex = 0;

// 第一步:提前初始化所有lottie实例,关闭自动播放
steps.forEach(step => {
  const animationElement = $(step).find('.animation').get(0);
  const lottieInstance = bodymovin.loadAnimation({
    container: animationElement,
    renderer: 'svg',
    loop: false,
    autoplay: false,
    path: animationElement.getAttribute('data-json')
  });
  lottieInstances.push(lottieInstance);
});

// 第二步:封装播放函数,触发指定索引的动画
function playStepAnimation(index) {
  // 索引超出实例数量,说明所有动画播放完成
  if (index >= lottieInstances.length) {
    console.log('全部动画播放完毕');
    return;
  }
  const currentInstance = lottieInstances[index];
  // 绑定当前动画的完成事件,结束后播放下一个
  currentInstance.onComplete = function() {
    console.log(`第${index + 1}个动画播放完成`);
    playStepAnimation(index + 1);
  }
  // 启动当前动画
  currentInstance.play();
}

// 第三步:启动播放,从第一个动画开始
playStepAnimation(currentPlayIndex);

可选优化

如果你的动画JSON文件较大,不需要提前全部加载,也可以把lottie实例化的逻辑放到playStepAnimation函数内,每次播放前再实例化加载对应动画,减少页面初始化时的请求压力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:04