首页 > 其他分享 >umijs如何使用封装好的Lottie动画

umijs如何使用封装好的Lottie动画

时间:2022-08-28 18:02:08浏览次数:93  
标签:动画 Lottie 封装 animationInstances current umijs animationData import lottie

lottie:设计师制作动画,并提供json文件。前端可以使用对应的api操作时间流,对动画进行一些事件上的操作。

官网文档: https://github.com/airbnb/lottie-web

一. 下载依赖

 npm install lottie-web

二. 在组件内引用

import lottie from 'lottie-web';

三.引入json文件

Lottie默认读取Assets中的文件,我们需要把设计导出的动画文件.json 保存在app/src/main/assets文件里。

四.构建Animation组件

例:

import React, { useRef, useEffect } from 'react'; import lottie from 'lottie-web'; import { connect } from 'umi'; import classNames from 'classnames';
const Animation = ({ className, visible, style, animationData, onInit }) => {     const el = useRef();     const animationInstances = useRef();     const duraction = animationInstances.current?.getDuration?.(true);     function init() {         if (!animationData) return;         animationInstances.current = {};         if (typeof animationData === 'function') {             animationData().then(initAnimate);         } else {             initAnimate(animationData);         }
        function initAnimate(animationData) {             animationInstances.current = lottie.loadAnimation({               container: icon, // 包含动画的dom元素               renderer: 'svg', //渲染出来的是什么格式                      loop: true, //循环播放

            autoplay: true, //自动播放
               path: './data.json' // 动画json的路径
 });

     onInit?.(animationInstances.current);    }

    }     useEffect(() => {         return () => {             // eslint-disable-next-line no-unused-expressions             // animationInstances.current?.destroy?.();                    };         // eslint-disable-next-line react-hooks/exhaustive-deps     }, []);
    useEffect(() => {         if (animationInstances.current || !visible) return;
        init();         // eslint-disable-next-line react-hooks/exhaustive-deps     }, [visible]);     //     return (         <div             ref={el}             style={{ visibility: !visible && 'hidden', ...style }}             className={classNames('lottie-animate', className)}         >         </div>     ); }; function mapStateToProps() {     return {     }; } export default connect(mapStateToProps)(Animation); 4.在需要使用的页面引入Animation组件   import Animation from '文件路径'; const animation = () => import('@/assets/文件路径');  

标签:动画,Lottie,封装,animationInstances,current,umijs,animationData,import,lottie
From: https://www.cnblogs.com/AllenPan/p/16633254.html

相关文章

  • Java封装正则表达式工具类
    Java与正则表达式Java中封装了关于正则表达式的内容,但是并不够彻底(抑或是我理解不够彻底),方便起见,在此编写一个小工具类:publicstaticArrayList<ArrayList<String>>......
  • axios和jquery封装ajax请求
        //axios封装的ajax    //get方法返回值是一个promise方法    //document.querySelector('.get').onclick=function(){    /......
  • logging 日志封装
    记录一种日志封装logger.pyimportosimportloggingclassAppLogger:def__init__(self,name,level=logging.DEBUG,stdout=False,tofile=None):#......
  • 西门子SmartPLC自由口通讯封装兼容Modbus_可自定义报文格式
    最近一直在用西门子SmartPLC,由于项目需求自定义协议,为了数据的准确性用了CRC校验,模块兼容Modbus_RTU,自定义报文格式。此模块主要用的是SmartPLC,指针类型,通过寻......
  • 封装
    封装封装(数据的隐藏)通常应该禁止直接访问一个对象中的实际表示,而应该通过接口来访问,这称为信息隐藏。记住一句话:属性私有,get/setpublicclassStudent{//privat......
  • Ajax的封装
        //ajax的回调函数的封装,建议不使用回调函数处理异步问题    letbtn=document.querySelector('button')    btn.addEventListener('clic......
  • axios封装loading加载
    实现如下图效果  点击获取数据按钮出现loading效果1.定义一个Loading组件<template><divv-if="isShow"class="box"><divclass="container"><div......
  • ASEMI整流桥DB307S参数,DB307S规格,DB307S封装
    编辑-ZASEMI整流桥DB307S参数:型号:DB307S最大重复峰值反向电压(VRRM):1000V最大RMS电桥输入电压(VRMS):700V最大直流阻断电压(VDC):1000V最大平均正向整流输出电流(IF):3A峰值正......
  • 封装文件导入组件,含导入进度条
    需求系统中需要有多个文件导入的地方,因此需要把它封装为组件便于复用。问题是:每次的导入url不同,每次封装的导入接口应该在主页面用呢?还是在组件页面用?解决办法分析:其......
  • 什么是双向链表?双向链表的操作封装实现(增删改查)?
    什么是双向链表?双向链表既可以从头遍历到尾,又可以从尾遍历到头也就是链表相连的过程是双向的.那么它的实现原理,你能猜到吗?一个节点既有向前连接的引用,也......