动画革命:Lottie如何改变我们对移动应用交互的认知

在数字世界的浩瀚星空中,每一个像素都跃动着无限创意与想象的火花。当静态的界面遇上动态的魔法,一场视觉盛宴便悄然开启。今天,让我们一同揭开一位幕后英雄的神秘面纱——Lottie,这个在UI/UX设计界掀起波澜的动画利器,正引领着交互体验的新纪元。

目录

初识Lottie

Lottie基础使用

封装全局Lottie组件


初识Lottie

        Lottie.js是一个JavaScript库,它允许开发者在网页或移动应用中轻松集成由Adobe After Effects(AE)创建的动画,其基于json格式的Bodymovin文件,这些文件是由设计师在AE中创建的动画经过特定插件导出得到的,UI设计师在AE中使用Bodymovin插件将动画导出为json格式的Bodymovin文件,该文件包含了动画的所有关键信息和指令,Lottie.js库能够解析这些json文件,并根据文件中的指令在目标平台上绘制和渲染动画,详情可查阅 官方文档 这里不再赘述。

        初次接触的朋友可以还不知道什么是AE?说白了就是一款由Adobe公司开发的图形视频处理软件,广泛应用于电影、电视、广告、动画、游戏等领域,是后期制作中不可或缺的工具。虽然Lottie本身不直接生成AE动画,但它通过解析由AE导出的json文件来在多种平台上实现动画效果,因此在某种意义上,我们可以将Lottie生成的效果视为AE动画的一种跨平台应用形式,这里直接搜索官方文档进行下载AE工具即可。

        对于前端开发来说,制作AE动画的工作相当于是UI设计师的工作内容了,前端开发没有必要就是花精力去懂得如何制作AE动画,仅仅需要会使用AE动画即可,这里直接前端和UI相互沟通即可,那么对于前端开发来说,没有UI设计师并且也不会AE动画制作但是想在页面上使用AE动画,那该怎么办呢?这里就需要借助网上的一些面试的AE动画资源进行使用即可,这里博主尽量分享一些免费的AE动画网站资源,当然读者们要是有更好的资源欢迎在评论区留言,一个人可以走的很快,但一群人可以走的更远! 分享的网站站点如下

LottieFiles:Lottie的最大赞助商,是世界上最大的免费、即用型、可定制的动画库交互网站,其中世界各地的设计师都可以在其中进行创作,给出 地址

进入控制台之后,可以现在自己选择免费的AE动画然后进行操作:

LottieLab:创建和编辑AE动画的在线工具,易于学习,并充满强大的功能,给出地址:地址

在操作工具台上,我们可以根据现有的功能创建一个属于自己的AE图,然后导出并使用:

Lordicon:是一个不断增长的库,其中充满了精心制作的高质量静态和动画图标,给出 地址

这里我们可以选择免费的AE动画进行下载:

对于AE动画的话,不同的平台可以兼容性不一致,这里我们简单了解一下:地址

当我们下载好AE动画的json文件之后,可以看到里面是一个非常庞大的代码,这段代码其实不重要,我们不需要看懂它,其实里面只是存储了我们的动画数据:

Lottie基础使用

这里我们拿vue进行举例,直接终端执行如下命令进行安装vue3模板的lottie:

npm install vue3-lottie@latest --save

该第三方包对应的参数作用如下所示:

Prop类型默认值描述
animationDataObject{}作为JSON对象提供的lottie动画数据
 animationLinkString''Lottie动画数据的URL链接
widthNumber or String"100%"lottie动画容器的宽度(数字对应像素值)
heightNumber or String"100%"lottie动画容器的高度(数字对应像素值)
speedNumber"1"lottie动画的速度
directionString"forward"动画播放方向
loopNumber or Booleantruelottie动画应该运行的实例数(true为无限)
autoPlayBooleantrue在组件加载时启动动画
delayNumber0延迟动画播放状态几毫秒
pauseOnHoverBooleanfalse是否在悬停时暂停动画
playOnHoverBooleanfalse当鼠标悬停时是否播放动画
 backgroundColorStringtransparent容器的背景颜色
rendererString"svg"设置渲染器

然后我们开始对该插件进行一个使用,如下:

最终呈现的效果如下所示,可以看到我们的浏览器已经渲染出了AE动画了:

        当然vue3-lottie是基于lottie-web的Vue 3组件封装,专为Vue 3项目设计,通过Vue组件的形式提供,可以更方便地在Vue 3项目中使用lottie动画,减少手动设置DOM和监听事件的复杂性。提高了开发效率,开发者可以直接通过 Vue 的模板语法和组件属性来控制动画。

如果想在其他的UI框架中使用lottie的话还是需要安装lottie-web插件的,它不依赖于特定的前端框架,可以在纯 JavaScript 环境中使用,也可以轻松地集成到任何前端框架中,其也提供了丰富的 API 来控制动画的播放、暂停、停止等,适用于需要高度自定义动画行为的场景,安装命令如下:

npm install lottie-web

这里通过一段代码进行一个简单的样式:

<template><div class="box" ref="box" @click="handleClick"></div>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue';
import lottie from 'lottie-web'
import animationData from './assets/lottieFiles/animation1.json';let box = ref();
let animation = ref();
const initLottie = () => {animation.value = lottie.loadAnimation({container: box.value, // 绑定dom节点renderer: 'svg', // 渲染方式:svg、canvasloop: true, // 是否循环播放,默认:falseautoplay: true, // 是否自动播放, 默认trueanimationData: animationData// AE动画使用bodymovie导出为json数据})
}const handleClick = () => {animation.value.pause()
}onMounted(()=> {initLottie()
})
</script>

最终呈现的效果如下所示:

相对来说Lottie的学习成本还是相对较小的,这里我们可以直接在官方文档中翻阅具体的函数:

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(); // 删除该动画,移除相应的元素标签等。animation.addEventListener('data_ready', () => {}) // 动画数据加载完毕
animation.addEventListener('config_ready', () => {}) // 完成初始配置后
animation.addEventListener('data_failed', () => {}) // 加载动画数据失败
animation.addEventListener('loaded_images', () => {}) // 所有图片加载成功或者失败
animation.addEventListener('DOMLoaded', () => {}) // 将元素添加到DOM后

封装全局Lottie组件

在一个项目中,如果项目中存在多处使用Lottie的情况下,这里就需要将其设置为全局组件进行使用了,为了方便大家使用,这里我将封装的全局组件代码分享如下:

如下代码,我设置了样式、配置文件、事件处理三种情况:

<template><div class="lottie" ref="lottieContainer" :style="handleStyle"></div>
</template><script setup lang="ts">
import { ref, computed, onMounted, onBeforeUnmount } from 'vue'
import lottie from 'lottie-web'// 父组件传递参数
const props = defineProps({style: { type: Object, default: ()=> ({width: 100 as String | Number,height: 100 as String | Number,rotate:  0 as String | Number,scale: 1 as String | Number,})},options: { type: Object, default: ()=> ({renderer: 'svg', // 'svg' / 'canvas' / 'html' 设置渲染器loop: true, // 是否循环播放autoplay: true, // 是否自动播放animationData: "" // 动画数据})}
})
let lottieContainer = ref() // 容器
let animation = ref()  // 动画实例// 初始化lottie
const initLottie = () => {animation.value = lottie.loadAnimation({container: lottieContainer.value, // 绑定dom节点renderer: props.options.renderer, // 渲染方式:svg、canvasloop: props.options.loop, // 是否循环播放,默认:falseautoplay: props.options.autoplay, // 是否自动播放, 默认trueanimationData: props.options.animationData// AE动画使用bodymovie导出为json数据})
}
// 计算属性来动态设置样式
const handleStyle = computed(() => {return {width: `${props.style.width}px`,height: `${props.style.height}px`,transform: `rotate(${props.style.rotate}deg) scale(${props.style.scale})`}
})
// 点击事件
const handleClick = () => {// 判断是否暂停if (animation.value.isPaused) {animation.value.play()} else {animation.value.pause()}
}onMounted(()=> initLottie()) // 挂载时初始化
onBeforeUnmount(()=> animation.value && animation.value.destroy()) // 卸载时销毁
defineExpose({handleClick
})
</script>

在父组件调用后,只需要传递对应的参数和处理相应的事件即可:

<template><lottie :style="{ width: 200, height: 200, rotate: 80, scale: 0.5 }" :options="options" ref="lottieRef" @click="handleLottie"></lottie>
</template><script lang="ts" setup>
import { ref } from 'vue';
import lottie from "./components/lottie.vue"
import animationData from './assets/lottieFiles/animation2.json';let lottieRef = ref();let options = ref({renderer: 'canvas', // 'svg' / 'canvas' / 'html' 设置渲染器loop: true, // 是否循环播放autoplay: true, // 是否自动播放animationData: animationData // 动画数据
})const handleLottie = () => {lottieRef.value.handleClick();
}
</script>

最终呈现的效果如下所示,如下实现了AE动画的样式修改和事件处理

大半夜凌晨了,博主还在写文章,脑壳属实有点小疼了,一些细节懒得说了,目前就想到这么多,上面的全局组件封装的也很简陋,大家有什么想法或者需求的在评论区留言,博主看到了会及时更新文章,尽量满足读者的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVN与Git功能差异对比分析

最近在调研学习Git管理和分支模型相关内容&#xff0c;外延到了SVN和Git差异、工作原理等相关细节&#xff0c;学习整理如下。 SVN&#xff08;Subversion&#xff09;与 Git 的最大不同&#xff0c;主要包括以下几个方面&#xff1a; 交流探讨&#xff0c;加入群聊【Java学习…

51.2T 800G 以太网交换机,赋能AI开放生态

IB与以太之争 以太网替代IB趋势明显。据相关报告&#xff1a;2024年TOP500的超算中&#xff0c;采用以太网方案占比48.5%&#xff0c;InfiniBand占比为39.2%&#xff0c;其中排名前6的超算中已有5个使用以太网互联。 开放系统战胜封闭系统仅是时间问题。我们已经看到&#xf…

钡铼EdgeIO系统BL206对接MQTT、Modbus TCP、OPC UA

钡铼EdgeIO系统BL206提供双网口支持交换机级联功能&#xff0c;支持标准MQTT协议、Modbus TCP协议、OPC UA协议&#xff0c;由耦合器与IO模块组成&#xff0c;采用Web配置&#xff0c;内置云驱动、可编程逻辑控制功能&#xff0c;用户点击即可连接云平台。耦合器自带诊断功能&a…

网络结构-组件-AI(九)

深度学习网络组件 RNN公式讲解计算示意图讲解 CNN计算示意 Normalization(归一化层)Normalization常见两种方式 Dropout层 RNN 循环神经网络&#xff08;recurrent neural network&#xff09; 主要思想&#xff1a; 即将整个序列划分成多个时间步&#xff0c;将每一个时间步的…

GPU OpenGL 版本检测 GLview

官网链接 https://www.geeks3d.com/dl/show/10097 也可在此下载https://download.csdn.net/download/qq_51355375/89559913 下载后直接默认安装即可&#xff0c; 打开安装目录&#xff0c;双击运行openglex.exe即可

【Python系列】Python 缓存机制

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【一刷《剑指Offer》】面试题 49(案例):把字符串转换成整数

力扣对应题目链接&#xff1a;8. 字符串转换整数 (atoi) - 力扣&#xff08;LeetCode&#xff09; 一、《剑指Offer》对应内容 二、分析题目 根据题意&#xff0c;有以下四种字符需要考虑&#xff1a; 首部空格&#xff1a; 删除之即可。符号位&#xff1a; 三种情况&#xf…

计算机网络知识点面试总结3

#来自ウルトラマンゼロ&#xff08;赛罗&#xff09; 1 数据链路层功能 数据链路层在物理层提供的服务的基础上向网络层提供服务&#xff0c;其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层&#xff0c;其主要作用是加强物理层传输原始比特流的功能。…

【Day12】登录认证、异常处理

1 登录 先创建一个新的 controller 层&#xff1a;LoginController RestController public class LoginController {Autowiredprivate EmpService empService;// 注入PostMapping("/login")public Result login(RequestBody Emp emp) { // 包装对象Emp e empServic…

PyTorch的自动微分模块【含梯度基本数学原理详解】

文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.3 管理信息系统(MIS)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.3 管理信息系统(MIS) 3.3.1 管理信息系统的概念3.3.1.1 部件组成3.3.1.2 结构分类3.3.1.2.1 开环结构3.3.1.2.2 闭环结构3.3.1.3 金字塔结构3.3.2 管理信息系统的功能3.3.3 管理信息系统的组成3.3.3.1 销售市场子系统3.3.3.2…

x86+FPGA+AI:地铁全线刷脸过闸,地铁智慧票务系统专用计算机

地铁全线刷脸过闸 | 可提供地铁智慧票务系统专用计算机 近日&#xff0c;成都地铁在全线网地铁车站正式上线“智慧票务”系统&#xff0c;全通道无接触式“戴口罩刷脸乘车”的通行方式优化了乘客出行效率、降低了疫情交叉感染风险&#xff0c;因此备受好评&#xff01; 01、地铁…

Unity UGUI 之 Image和Rawimage

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Image是什么 Unity - 手册&#xff1a;图像 精灵格式是什么&#xff1f; 1.2重要参数 …

Linux的热插拔UDEV机制和守护进程

目录 一、Linux的热插拔UDEV机制 二、守护进程 2.1 守护进程概念和基本特点&#xff1a; 2.2 显示进程信息&#xff1a; 2.3 守护进程和后台进程的区别&#xff1a; 2.4 创建守护进程的步骤和守护进程的特征&#xff1a; 2.4.1 创建守护进程的步骤&#xff1a; 2.4.2 守…

系统级联调联试方案模板

目录 系统级联调联试方案 1. 引言 2. 准备工作 3. 测试策略 4. 测试案例设计 5. 测试执行 6. 缺陷管理 7. 风险评估 8. 测试总结 9. 后续行动 10. 附录 联调联试&#xff08;Integration and Testing&#xff09;是指在系统开发过程中&#xff0c;将各个子系统或模块…

查找多个关键词在单元格出现的位置(find函数)并且统计(count函数)和显示(lookup函数)对应的关键词

目的:从交易用途中统计E列中的村名出现的次数,并且分离出村和村小组。其中F列是所有村的名称(不重复),F列是所有小组的名称 1.使用find函数查询关键词在单元格中对应的位置 在G4单元格中输入如下公式:参数解释说明: Find_text:要查找的字符串即目标字符。 Within_text …

内网隧道——隧道技术基础

文章目录 一、正向连接与反向连接1.1 正向连接1.2 反向连接 二、端口转发三、端口映射四、端口复用五、代理和隧道的区别六、常见隧道穿透分类 环境&#xff1a; kali&#xff1a;192.168.92.6&#xff0c;MSF v6.3.25 win7&#xff1a;192.168.92.7 一、正向连接与反向连接 1…

androidkiller重编译apk失败的问题

androidkiller重编译apk失败 参考&#xff1a; https://blog.csdn.net/qq_38393271/article/details/127057187 https://blog.csdn.net/hkz0704/article/details/132855098 已解决&#xff1a;“apktool” W: invalid resource directory name:XXX\res navigation 关键是编译…

【Pytorch】RNN for Name Classification

参考学习来自&#xff1a; https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.htmlRNN完成姓名分类https://download.pytorch.org/tutorial/data.zip 导入库 import glob # 用于查找符合规则的文件名 import os import unicodedata import stri…

计算机网络参考模型与5G协议

目录 OSI七层参考模型OSI模型vsTCP/IP模型TCP/IP协议族的组成 OSI七层参考模型 分层功能应用层网络服务与最终用户的一个接口表示层数据的表示,安全,压缩会话层建立,管理,终止会话传输层定义传输数据的协议端口号,以及流控和差错校验网络层进行逻辑地址寻址,实现不同网路之间的…