首先,获取 bodymovin 播放器的 javascript 库。可以通过script标签引入:

  1. <script src="js/bodymovin.js" type="text/javascript"></script>
  2. // OR
  3. <script src="https://cdnjs.com/libraries/bodymovin" type="text/javascript"></script>

或者通过 npm / bower 方式引入:

  1. npm install lottie-web
  2. // OR
  3. bower install lottie-web

Lottie初始化

调用 lottie.loadAnimation ()来启动动画:

  • animationData: 导出动画数据的对象
  • path: 动画对象的相对路径(animationData 和 path 是互斥的)
  • loop: true / false / number 动画循环播放控制
  • autoplay: true / false 是否自动播放
  • name: 动画名称,供将来参考
  • renderer: ‘svg’ / ‘canvas’ / ‘html’ 设置渲染器的类型
  • container: 用于渲染动画的 dom 元素

它返回的动画实例,您可以控制播放,暂停,setSpeed 等。

  1. lottie.loadAnimation({
  2. container: element, // the dom element that will contain the animation
  3. renderer: 'svg',
  4. loop: true,
  5. autoplay: true,
  6. path: 'data.json' // the path to the animation json
  7. });

Lottie常用实例方法

  • anim.play() — 开始播放动画
  • anim.stop() — 停止动画
  • anim.pause() — 暂停动画
  • anim.setSpeed(speed) — 设置播发速度 (1 是正常速度)
  • anim.goToAndStop(value, isFrame) — 播放到什么时机停止,第一个参数指的是时间或帧数,第二个参数表示第一个参数是否为帧数
  • anim.goToAndPlay(value, isFrame) — 到指定时机进行播放,第一个参数指的是时间或帧数,第二个参数表示第一个参数是否为帧数

Lottie常用Events事件

  • complete 完成
  • loopComplete
  • configready (when initial config is done) Config ready (完成初始配置后)
  • dataready (when all parts of the animation have been loaded) Data ready (动画的所有部分都已加载)
  • DOMLoaded (when elements have been added to the DOM) DOMLoaded (向 DOM 添加元素时)
  • destroy

更多相关使用问题请参考官方文档。— lottie文档

H5项目中Lottie组件使用指南

组件相关代码

  1. function Lottie(props) {
  2. const { options, initCallBack, className, events } = props;
  3. const containerDom = useRef(null);
  4. const lottieRef = useRef(null);
  5. useEffect(() => {
  6. lottieRef.current = lottie.loadAnimation({
  7. container: containerDom.current,
  8. ...options
  9. });
  10. (events || []).forEach(({ eventName, cbFun }) => {
  11. lottieRef.current.addEventListener(eventName, cbFun);
  12. });
  13. initCallBack && initCallBack(lottieRef.current);
  14. return () => {
  15. (events || []).forEach(({ eventName, cbFun }) =>
  16. lottieRef.current.removeEventListener(eventName, cbFun)
  17. );
  18. };
  19. }, [initCallBack, lottieRef, options, events]);
  20. return <div ref={containerDom} className={className}></div>;
  21. }

Lottie组件参数

  • options — Lottie动画配置参数,等同于 lottie.loadAnimation 方法参数
  • className —组件样式类名;
  • initCallBack —Lottie动画生成成功回调,回调参数为Lottie实例,可用户调用其相关方法;
  • events —接收一个对象数组用于监听Lottie相关事件,每个对象分别有eventName事件名称,和cbFun事件回调函数2个参数

具体使用方式可以参考下面案例代码:

  1. function Home(props) {
  2. const lottieRef = useRef({});
  3. const play = () => {
  4. lottieRef.current.play();
  5. };
  6. const stop = () => {
  7. lottieRef.current.stop();
  8. };
  9. const pause = () => {
  10. lottieRef.current.pause();
  11. };
  12. return (
  13. <div className="page-home">
  14. <Lottie
  15. className="lottie"
  16. initCallBack={e => (lottieRef.current = e)}
  17. events={[
  18. {
  19. eventName: 'data_ready',
  20. cbFun: () => console.log('animation data has loaded------')
  21. },
  22. {
  23. eventName: 'DOMLoaded',
  24. cbFun: () => console.log('animation data has DOMLoaded------')
  25. }
  26. ]}
  27. options={{
  28. renderer: 'svg',
  29. loop: true,
  30. autoplay: true,
  31. path: 'https://static.fenxianglife.com/ui/h5/loader.json'
  32. }}
  33. />
  34. <div className="btn" onClick={play}>
  35. 开始
  36. </div>
  37. <div className="btn" onClick={stop}>
  38. 结束
  39. </div>
  40. <div className="btn" onClick={pause}>
  41. 暂停
  42. </div>
  43. </div>
  44. );
  45. }