Live2D

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 bodymovin from "lottie-web"
事例:
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

 

posted @ 2022-07-13 16:56  喻佳文  阅读(558)  评论(0编辑  收藏  举报