vue中lottie的使用和配置详解

 更新时间:2026年01月20日 09:19:53   作者:孩子 你要相信光  
vue-lottie是一个用于在Vue项目中集成Lottie动画库的组件,它通过 JSON 文件渲染 AfterEffects 动画,适用于复杂矢量动画的高效展示,本文介绍vue中lottie的使用和配置方法,感兴趣的朋友跟随小编一起看看吧

一、vue-lottie 简介

vue-lottie 是一个 Vue 组件,用于在 Vue 项目中集成 Airbnb 的 Lottie 动画库。它通过 JSON 文件渲染 After Effects 动画,适用于复杂矢量动画的高效展示。

二、安装与基础使用

1. 安装

npm install vue-lottie@latest
# 或
yarn add vue-lottie

 2. 基础示例

<template>
  <lottie :options="lottieOptions" :height="400" :width="400" @animCreated="handleAnimation" />
</template>
<script>
import Lottie from 'vue-lottie';
import * as animationData from './animation.json';//animationData.json文件找ui生成
export default {
  components: { Lottie },
  data() {
    return {
      lottieOptions: {
        animationData: animationData,
        loop: true,
        autoplay: true,
      }
    };
  },
  methods: {
    handleAnimation(anim) {
      this.animation = anim; // 保存动画实例
    }
  }
};
</script>

三、核心配置项

1.组件 Props

Prop类型默认值说明
optionsObject必填Lottie 动画配置对象(见下方 options 详解)
widthNumber/String'100%'动画容器的宽度(如 300 或 '50%'
heightNumber/String'100%'动画容器的高度
speedNumber1播放速度(1=正常速度,2=2倍速,0.5=半速)
directionNumber1播放方向(1=正向,-1=反向)
pauseOnHoverBooleanfalse鼠标悬停时暂停动画

2.options 对象配置

属性类型默认值说明
animationDataObject必填从 JSON 文件导入的动画数据(import animationData from './anim.json'
loopBoolean/Numbertruetrue=无限循环,false=不循环,3=循环3次
autoplayBooleantrue是否加载后自动播放
rendererString'svg'渲染方式('svg'/'canvas'/'html')
rendererSettingsObject{}高级渲染设置(如抗锯齿、缩放模式等)

3.事件(Events)

事件名回调参数说明
animCreatedanim动画实例创建时触发
animationComplete-动画播放完成时触发(非循环模式)
enterFrame{currentTime, totalTime}每播放一帧触发

四、常用方法

通过 animCreated 获取动画实例后,可调用以下方法:

methods: {
  //@animCreated创建实例
  handleAnimation(anim) {
    this.anim = anim;
  },
  play() {
    // 播放动画(从当前帧开始)
    //如果动画已结束,会从头开始播放
    this.anim.play();
  },
  pause() {
    //暂停动画(保持当前帧)
    //再次调用 play() 会从暂停处继续
    this.anim.pause();
  },
  stop() {
    //停止动画(重置到第一帧)
    //与 pause() 不同,stop() 会回到起始状态
    this.anim.stop();
  },
  setSpeed(speed) {
    //设置播放速度
    //@param {Number} speed - 1=正常速度,2=2倍速,0.5=半速
    this.anim.setSpeed(speed); 
  },
  goToAndPlay(frame=500) {
    //跳转到指定时间/帧并播放
    //@param {Number} frame - 时间(毫秒)或帧数
    //@param {Boolean} [isFrame=false] - true=按帧跳转,false=按时间跳转
    this.anim.goToAndPlay(frame, true); // 跳转到第500帧并播放
  },
  goToAndStop(frame) {
    //跳转到指定时间/帧并停止
    //@param {Number} frame - 时间(毫秒)或帧数
    //@param {Boolean} [isFrame=false] - 是否按帧跳转
    this.anim.goToAndStop(frame, false);
  },
  playSegments(segments) {
    //播放指定片段
    //@param {Array} segments - 片段范围 [startFrame, endFrame] 或 [[seg1], [seg2]]
    //@param {Boolean} [forceFlag=false] - true=立即跳转,false=完成当前动画后跳转
    // 播放10~20帧
    this.anim.playSegments([10, 20], true);
    // 多片段顺序播放
    this.anim.playSegments([[0, 10], [20, 30]], true);
  },
  setSegment() {
    //设置动画播放区间(不立即生效,需配合 play())
    //@param {Number} startFrame - 起始帧
    //@param {Number} endFrame - 结束帧
    this.anim.setSegment(50, 100);
    this.anim.play(); // 播放50~100帧
  },
  freeze() {
    //冻结动画(停止渲染但保留进度)
    //比 pause() 更节省资源,适合隐藏时的动画
    this.anim.freeze();
  },
  unfreeze() {
    //解冻动画(恢复渲染)
    //配合 freeze() 使用,恢复时保持原有进度
    this.anim.unfreeze();
  },
  destroy() {
    //销毁动画实例,释放内存
    //组件卸载时建议调用
    this.anim.destroy();
  },
//属性获取
  getDuration() {
    //获取动画总时长/总帧数
    //@param {Boolean} [isFrame=false] - true=返回总帧数,false=返回总时间(毫秒)
    //@returns {Number}
    const totalFrames = this.anim.getDuration(true); // 获取总帧数
    const totalTime = this.anim.getDuration(); // 获取总时长(ms)
  },
  getCurrentTime() {
    //获取当前播放时间(毫秒)
    //@returns {Number}
    const currentTime = this.anim.getCurrentTime();
  },
//事件监听
  addEventListener() {
    //添加事件监听
    //@param {String} type - 事件类型(见下方事件列表)
    //@param {Function} callback - 回调函数
    this.anim.addEventListener('complete', () => {
      console.log('动画播放完成');
    });
  },
}

五、高级用法

1. 动态加载动画

async loadAnimation() {
  const response = await fetch('/api/get-animation');
  this.lottieOptions.animationData = await response.json();
}

2. 分段动画控制

// 播放特定片段
this.anim.playSegments([10, 20], true);
// 监听片段结束
this.anim.addEventListener('segmentStart', () => {
  console.log('Segment started');
});

3. 响应式尺寸

<lottie 
  :options="lottieOptions" 
  :width="windowWidth > 768 ? 500 : 300" 
  :height="windowWidth > 768 ? 500 : 300" 
/>

六、性能优化

  • 减少 JSON 文件体积
    • 使用 LottieFiles 的轻量化导出选项
    • 删除 JSON 中不必要的图层数据
  • 懒加载动画
<lottie v-if="showAnimation" :options="lottieOptions" />

使用 freeze 方法:

this.anim.freeze(); // 暂停并隐藏动画以释放资源

七、官方文档

八、常见问题

1. 动画不显示?

  • 检查 JSON 数据是否正确导入
  • 确保容器有明确的宽高

2. 如何实现点击触发动画?

<lottie ref="lottie" :options="{ autoplay: false }" />
<button @click="$refs.lottie.play()">播放</button>

3. 如何适配暗黑模式?

// 动态修改动画颜色
this.anim.setSubframe(false);
this.anim.updateDocumentData({
  layers: [{ 
    shapes: [{ 
      c: { k: isDark ? [0,0,0] : [255,255,255] } 
    }] 
  }]
});

通过合理配置 vue-lottie,你可以轻松实现高性能、可交互的矢量动画效果。建议结合 Lottie 官方工具调试动画效果后再集成到项目中。

到此这篇关于vue-lottie的使用和配置的文章就介绍到这了,更多相关vue lottie使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue navbar tabbar导航条根据位置移动实现定位、颜色过渡动画效果的代码

    vue navbar tabbar导航条根据位置移动实现定位、颜色过渡动画效果的代码

    这篇文章主要介绍了vue navbar tabbar导航条根据位置移动实现定位、颜色过渡动画效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Vue组件重新渲染(组件重载)的3种实现方式

    Vue组件重新渲染(组件重载)的3种实现方式

    这篇文章主要介绍了Vue组件重新渲染(组件重载)的3种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • vue单页面在微信下只能分享落地页的解决方案

    vue单页面在微信下只能分享落地页的解决方案

    这篇文章主要介绍了vue单页面在微信下只能分享落地页的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • vue移动端实现红包雨效果

    vue移动端实现红包雨效果

    这篇文章主要为大家详细介绍了vue移动端实现红包雨效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 聊聊vue生命周期钩子函数有哪些,分别什么时候触发

    聊聊vue生命周期钩子函数有哪些,分别什么时候触发

    这篇文章主要介绍了聊聊vue生命周期钩子函数有哪些,分别什么时候触发?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue.js移动端tab组件的封装实践实例

    vue.js移动端tab组件的封装实践实例

    本篇文章主要介绍了vue.js移动端tab的封装实践实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题

    解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题

    这篇文章主要介绍了解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Vue内存泄漏的识别和解决方案

    Vue内存泄漏的识别和解决方案

    Vue是人气爆棚且地表最强的JS(JavaScript)框架,祂允许我们构建动态交互式的Web App,然但是,和任何软件雷同,Vue App偶尔会遭遇内存泄漏,导致性能暴跌和意外行为,今天,我们将深入Vue App内存泄漏的原因,并探讨识别和修复这些问题的锦囊妙计
    2023-11-11
  • 浅析Vue.js 中的条件渲染指令

    浅析Vue.js 中的条件渲染指令

    这篇文章主要介绍了Vue.js 中的条件渲染指令,Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件。本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • Vue中实现可切换显示/隐藏侧边栏的按钮的示例代码

    Vue中实现可切换显示/隐藏侧边栏的按钮的示例代码

    这篇文章主要介绍了如何在Vue应用中实现一个可切换显示/隐藏侧边栏的按钮,通过设计基本结构、管理数据状态、实现CSS样式切换、核心实现原理、交互体验优化和动画效果,最终实现了侧边栏的平滑显示/隐藏功能,并提升了用户体验,感兴趣的小伙伴可以参考下
    2025-11-11

最新评论