当前位置: 首页 > news >正文

Vue3里如何使用本地lottie动画以及如何更优雅的批量引入图片

介绍了 Lottie 动画及其在 Vue 3 项目中的使用方法,重点解决了批量引入图片和相对路径问题,确保动画正常显示。

如果着急直接跳到「解决」章节。

前言

什么是 Lottie 动画?

Lottie 动画是一种轻量级的动画文件格式,它使用 JSON 描述动画数据,可以通过Lottie库在网页和移动应用中快速加载和渲染高质量的动画。它支持 AE 动画导出,并能够实现复杂的动效,同时保持小文件体积和高性能

----chatGPT

简单来说,Lottie 动画是一种用 JSON 格式描述的动画。由于其小体积和高性能,常用于实现复杂动画,UI 设计师可以将其导出给前端,前端导入后即可使用。

如何使用 lottie 动画

只需三步。

1、安装 vue3-lottie

npm install vue3-lottie@latest --save

2、注册组件

// main.js
import { createApp } from 'vue'
import Vue3Lottie from 'vue3-lottie'createApp(App).use(Vue3Lottie).mount('#app')

3、在 template 中使用

<template><h1>Vue3 lottie test</h1><Vue3Lottie :animationData="TestLottieJSONData" :height="200" :width="200" />
<div><script setup>
import TestLottieJSONData from './assets/lottie/data.json' // 引入 JSON 文件
</script>

但是在我的使用场景中出现了问题。

问题

UI 导出的动画带有图片,但无论是 JSON 文件命名,还是图片命名都是一样的,而且 JSON 文件里使用的图片都是相对路径。例如,有两个动画,它们的文件结构如下所示:

.
├── data.json
└── images├── img_0.png└── img_1.png

这就带来了2个问题。

  1. 如何批量引入 images 文件夹下的图片?
  2. 如何解决相对路径的问题?

排查

把引入的 JSON 文件打印出来,可以看到静态文件(即图片)都存在于 TestLottieJSONData.assets 这个对象数组下,打印其中一项如下:

{"id": "image_0","w": 107,"h": 140,"u": "images/","p": "img_0.png","e": 0
}

可以看到,u 项是文件夹,p 项是文件名,也就是说只要遍历这个数组,修改这两个项就好。

解决

问题一:如何批量引入 images 文件夹下的图片?

使用 import.meta.glob 批量引入:

const testLottieImages = import.meta.glob('./assets/lottie/images/*.png', {eager: true})

问题二:如何解决相对路径的问题?

遍历静态资源数组,修改路径:

TestLottieJSONData.assets.forEach((item, index) => {const imagePath = `./assets/lottie/images/${item.p}`item.u = ''if (testLottieImages[imagePath]) {item.p = testLottieImages[imagePath].default}
})

参考

  1. npmjs - vue3-lottie
  2. Github - 怎么处理需要图片资源的动画

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在uniapp中使用swicth组件传递额外的参数方法
  • mysql-数据库性能测试之,连接数测试
  • flutter 画转盘
  • 面试准备-C++指针和引用的区别
  • 盲盒抽奖源码
  • 【Docker系列】Docker 容器时区设置指南
  • PDF 转Word 开源库
  • K8S - ConfigMap的简介和使用
  • Grafana中的rate与irate以及histogram
  • 【Spark集群部署系列四】Spark on YARN介绍和环境部署(个人笔记,供参考)
  • 聚星文社,绘唐科技AI工具
  • Redis主从同步配置
  • K8S上安装LongHorn(分布式块存储) --use
  • 远程消息传递的艺术:NSDistantObject在Objective-C中的妙用
  • Spring Security 6如何使用?
  • 「译」Node.js Streams 基础
  • Android单元测试 - 几个重要问题
  • Asm.js的简单介绍
  • github从入门到放弃(1)
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript 奇技淫巧
  • java多线程
  • js 实现textarea输入字数提示
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Redash本地开发环境搭建
  • RxJS: 简单入门
  • SpriteKit 技巧之添加背景图片
  • swift基础之_对象 实例方法 对象方法。
  • 测试如何在敏捷团队中工作?
  • 程序员最讨厌的9句话,你可有补充?
  • 解析 Webpack中import、require、按需加载的执行过程
  • 利用DataURL技术在网页上显示图片
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 爬虫模拟登陆 SegmentFault
  • 山寨一个 Promise
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 由插件封装引出的一丢丢思考
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 2017年360最后一道编程题
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #Java第九次作业--输入输出流和文件操作
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (day18) leetcode 204.计数质数
  • (ibm)Java 语言的 XPath API
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (vue)页面文件上传获取:action地址
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .CSS-hover 的解释
  • .htaccess配置常用技巧
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net Remoting(分离服务程序实现) - Part.3