lottie-web gzip 压缩后大小有 40kb 的大小。如果使用 npm 包的形式进行加载, 那么 vendor.js 会增加 40kb 的大小, 这样会使页面性能下降。
通过 bodymovin 插件导出的动画 JSON 文件大小也可能比较大(复杂的动画达到上百 kb), 所以不建议将 JSON 数据内联到页面中, 而最好是当做一个 JSON 文件来进行下载。
const animation = bodymovin.loadAnimation({container: element, // 要包含该动画的dom元素renderer: 'svg', // 渲染方式, svg、canvas、html(轻量版仅svg渲染)loop: true, // 是否循环播放autoplay: true, // 是否自动播放animationData, // 动画 JSON 文件(优先级比 path 高)path: animateJsonPath, // 动画 JSON 文件路径});
lottie-web 提供了很多的控制动画播放的方法, 下面是一些常用的方法。animation 等于上面代码中的 animation。
animation.play(); // 播放该动画, 从目前停止的帧开始播放animation.stop(); // 停止播放该动画, 回到第 0 帧animation.pause(); // 暂停该动画, 在当前帧停止并保持animation.goToAndStop(value, isFrame); // 跳到某个时刻/帧并停止。isFrame(默认false) 指示 value 表示帧还是时间(毫秒)animation.goToAndPlay(value, isFrame); // 跳到某个时刻/帧并进行播放animation.goToAndStop(30, true); // 跳转到第 30 帧并停止animation.goToAndPlay(300); // 跳转到第 300 毫秒并播放animation.playSegments(arr, forceFlag); // arr 可以包含两个数字或者两个数字组成的数组, forceFlag 表示是否立即强制播放该片段animation.playSegments([10,20], false); // 播放完之前的片段, 播放 10-20 帧animation.playSegments([[0,5],[10,18]], true); // 直接播放 0-5 帧和 10-18 帧animation.setSpeed(speed); // 设置播放速度, speed为 1 表示正常速度animation.setDirection(direction); // 设置播放方向, 1 表示正向播放, -1 表示反向播放animation.destroy(); // 删除该动画, 移除相应的元素标签等。在unmount的时候, 需要调用该方法
lottie-web 中可能也需要监听一些事件, 比如加载完动画 JSON 文件时的 data_ready 事件。监听方法如下:
animation.addEventListener('data_ready', () => {console.log('animation data has loaded');});
除了 data_ready
事件, 下面还有一些其他常用的事件可以监听: