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

server/2024/9/23 19:55:53/

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

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

前言

什么是 Lottie 动画

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

----chatGPT

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

lottie__14">如何使用 lottie 动画

只需三步。

vue3lottie_18">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 - 怎么处理需要图片资源的动画

http://www.ppmy.cn/server/101916.html

相关文章

Android 13 使用 cmd media_session 命令调节音量

基于 Android 13 &#xff0c; cmd media_session usage &#xff1a; console:/ # cmd media_session usage: media_session [subcommand] [options]media_session dispatch KEYmedia_session list-sessionsmedia_sessio…

打包时未添加camera模块,请参考https://ask.dcloud.net.cn/arss/1ooticle/283

今天在app打包使用的时候突然发现app在拍照上传照片的时候遇到这个问题 遇到这种情况通常是因为app打包的时候manifestjson文件中App模块配置中的Camera&Gallery配置没有打开&#xff0c;点击相应选项勾选即可 然后再上传打包就好了! 哈哈哈好久没写博客了最近太忙了&…

立体连接扩展意义下的开源AI智能名片O2O商城小程序探索

摘要&#xff1a;随着数字化时代的深入发展&#xff0c;传统品牌营销体系正经历着前所未有的变革。立体连接作为一种新兴的市场营销策略&#xff0c;不仅重构了品牌与消费者之间的认知与交易链条&#xff0c;更在市场定位、需求辨识、价值定位及价值创造等多个维度展现出其独特…

c语言-经典例题

C语言-经典例题 一、单项选择题 1、 -- A 2、 -- C y<5 --是关系运算符的优先级大于&& -- 是逻辑运算符 3、 -- B - D选项&#xff1a;c是float类型&#xff0c;所以c/2是1.5 4、 -- C 从后往前执行&#xff08;先算后面的&a…

5. 数据结构—栈的实际案例

1. 10进制转8进制 void conversion(int n){LinkStack S;InitStack(S);while(n){Push(S,n%8);nn/8;}while(!StackEmpty(S)){int x;Pop(S,x);printf("%d",x);} } 2. 括号匹配 bool Matching(){LinkStack S;char ch,x;InitStack(S);while(cin>>ch){if(ch#)bre…

拼多多客服的得力助手:自动回复软件

随着时代的发展&#xff0c;科技的进步&#xff0c;传统的客服人工打字已经逐渐不能适应当今快节奏的电商服务需求。如今&#xff0c;市面上涌现众多客服机器人辅助软件&#xff0c;他们以高效的特别快速地成为拼多多电商客服人员必备的工具。 作为一名拥有八年经验的老电商客服…

Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术

人工智能咨询培训老师叶梓 转载标明出处 现实世界的视频捕获虽然因其真实性而宝贵&#xff0c;但常常受限于长尾分布的问题&#xff0c;即常见场景过度呈现&#xff0c;而关键的罕见场景却鲜有记录。这导致了所谓的"分布外问题"&#xff0c;在模拟复杂环境光线、几何…

python:画由两条抛物线所围成的图形

《高等数学》同济大学版 P338 编写 test_diff_2_area.py 如下 # -*- coding: utf-8 -*- """ 画由两条抛物线: ysqrt(x) , yx^2 所围成的图形的面积 """ import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import…