Lottie 中文文档 下载 App

播放控制与事件监听——API 一览

Player 对象基础

lottie.loadAnimation() 返回一个 player 对象,是你控制动画的句柄:

const anim = lottie.loadAnimation({ /* ... */ });

// anim 是 player 对象
console.log(anim.loopCount);    // 循环次数
console.log(anim.currentFrame); // 当前帧
console.log(anim.totalFrames);  // 总帧数

播放控制方法

方法含义
play()从头或从暂停位置开始播放
stop()停止并回到第 0 帧
pause()暂停在当前帧
goToAndStop(frame, isFrame)跳到指定帧并停止。isFrame=true 表示 frame 参数是帧号,false 表示时间(秒)
goToAndPlay(frame, isFrame)跳到指定帧并开始播放
setDirection(dir)1 = 正向播放,-1 = 反向
setSpeed(speed)倍速,1 = 正常,0.5 = 半速,2 = 两倍快
playSegments(segments, forceFlag)播放指定帧范围。segments 是 [[start, end]] 数组
destroy()销毁动画,释放内存(组件卸载时必须调用)

实战示例

// 跳到第 30 帧,停止
anim.goToAndStop(30, true);

// 跳到 1.5 秒处,继续播放
anim.goToAndPlay(1.5, false);

// 只播放第 20~50 帧
anim.playSegments([[20, 50]], true);

// 反向播放
anim.setDirection(-1);
anim.play();

// 0.5 倍速慢放
anim.setSpeed(0.5);

事件监听

player 对象提供了 addEventListener 方法:

事件触发时机
complete整个动画(或最后一段)播放完成
loopComplete每次循环播放完成时(loopCount++)
enterFrame每一帧都会触发(性能敏感,谨慎使用)
frameChange帧变化时(比 enterFrame 略粗)
config_readyJSON 配置加载完、开始渲染前
data_failedJSON 文件加载失败(URL 错误、网络问题)
loaded_images所有图片资源加载完
DOMLoadedDOM 元素创建完成

示例

anim.addEventListener('complete', () => {
  console.log('动画播放完了');
});

anim.addEventListener('loopComplete', () => {
  console.log(`第 ${anim.loopCount} 次循环结束`);
  if (anim.loopCount >= 3) {
    anim.pause(); // 播 3 次后停止
  }
});

anim.addEventListener('enterFrame', () => {
  // 每一帧都调——注意性能
  console.log(`当前帧: ${anim.currentFrame}/${anim.totalFrames}`);
});

anim.addEventListener('data_failed', () => {
  console.error('动效文件加载失败');
});

与 React 的配合

在 React 组件里,事件监听的注册和清理也要放在 effect 里:

useEffect(() => {
  const anim = lottie.loadAnimation({ /* ... */ });

  const handleComplete = () => { /* ... */ };
  anim.addEventListener('complete', handleComplete);

  return () => {
    anim.removeEventListener('complete', handleComplete);
    anim.destroy();
  };
}, []);