lottie动画的使用
用途:用来做动画。
优缺点:(copy的)
优点:
由于将动画变成了json字符串,相比几M体积的gif图,等质量下的压缩率达到80%及以上。
支持云端动画资源加载,上线新的动画效果不需要发版
支持实时渲染 After Effects 动画,让 app 加载动画像加载图片一样简单。
因为Lottie是利用json文件生成动画,从而避免了不同分辨率、不同设备尺寸上面动画效果存在差异的问题。
只需要进行一动画绘制,生成一次json文件,跨端使用(android、ios、web)
Android: API16+
IOS : IOS8+ /MacOS 10.10+
WEB:调用Bodymovin提供的js库 — bodymovin.js
拿到动画.json文件后,研发可以灵活的自行修复动画的颜色、路径等数据,自行扩展
拥有完整丰富的API,除了常规的播放、控制进度、暂停控制,还可以缓存、添加额外的原生UI
在未开启硬件加速的情况下,帧率、内存,CPU都比属性动画差,开启硬件加速后,性能差不多。
缺点:
Lottie尚不支持效果菜单中的表达式或任何效果。
使用alpha遮罩会影响性能。 如果你使用的是alpha遮罩或alpha倒置遮罩,遮罩的大小会对性能产生更大的影响。
Lottie还不支持阴影,颜色叠加或笔触等图层效果。
导出比您想要支持的最宽屏幕更宽的动画,使开发者在Android上使用centerCrop类型或在iOS上使用aspectFill内容模式。
举例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <script src="scripts/bodymovin.js"></script> <title>Document</title> <style> html { margin: 0; padding: 0; background-color: black; } body, html { width: 100%; height: 100%; overflow: hidden; background-color: #000; } #svgContainer { max-width: 100%; max-height: 100%; background-color: #000; position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; } </style> </head> <body> <div id="svgContainer"></div> </body> <script> /* Shapes */ var svgContainer = document.getElementById("svgContainer"); var animItem = bodymovin.loadAnimation({ wrapper: svgContainer, animType: "svg", loop: true, path: "https://labs.nearpod.com/bodymovin/demo/markus/isometric/markus2.json", }); </script> </html>
react工程中:
安装:
npm i lottie-web --save
引入:
import { createElement, useEffect } from "rax";
import View from "rax-view";
import Picture from "@ali/rax-picture";
import Modal from "rax-modal";
import bodymovin from "lottie-web"
import "./index.less";
function CertificateModel(props) {
const { visible, close, activityInfo } = props;
function loadingBg() {
bodymovin.loadAnimation({
wrapper: document.getElementById("container-bg"),
animType: "svg",
loop: false,
autoPlay: true,
path: "https://dev.g.alicdn.com/alisports-fe/assets/0.0.88/card-Game/gaizhang.json",
});
}
useEffect(() => {
loadingBg()
}, [])
return (
<Modal
visible={visible}
onHide={() => { }}
onShow={() => { }}
onMaskClick={close}
contentStyle={{
position: "absolute",
width: "auto",
height: "auto",
background: "none",
}}
>
<View className="modal-container">
<div id="container-bg" />
<View className="container-box">
<Picture
className="container-img"
source={{
uri: activityInfo?.credentialUrl || 'https://img.alicdn.com/imgextra/i3/O1CN01iK5xKM1xJmhFkERfU_!!6000000006423-2-tps-600-800.png',
}}
resizeMode="cover"
/>
</View>
<View className="container-icon" onClick={() => close()} />
</View>
</Modal>
);
}
export default CertificateModel;
参考文档:https://github.com/airbnb/lottie-web
Lottie材料网站:https://lottiefiles.com/
参考demo:
1.https://github.com/airbnb/lottie-web/blob/master/demo/bodymovin/index.html
2.https://codepen.io/airnan/pen/MPmQQB

浙公网安备 33010602011771号