返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Lottie动画前端开发使用技巧
  • 369
分享到

Lottie动画前端开发使用技巧

2024-04-02 19:04:59 369人浏览 泡泡鱼
摘要

目录一、为什么会有Lottie动画呢?二、Lottie介绍三、Lottie常见属性和方法四、封装Lottie - React Hooks版五、Lottie组件的引入与调用结语一、为什

一、为什么会有Lottie动画呢?

前端程序员根据UI视觉稿实现页面效果时一直存在这样的一种“矛盾” - 动画效果更完美与工期成本的矛盾。一般来说,页面中包含的动画效果越复杂,前端程序员在实现时需要的工期成本越大,尤其是在官网、大促活动、活动拉新等包含巨多动画效果的场景中,动画实现需要的时间占据了大部分工期时间,而工期往往是非常紧凑的。同时后期还经常伴随着与UI设计师的反复“拉扯” - 动画方向要改变下,运动的路径曲线要再调整下,这个圆角值不太圆,这个图片辛苦再替换下。诸如此类,都是让程序员脑袋变秃的罪魁祸首之一!

在反复的拉扯“折磨”中,有一批程序员就在不停的思索,将动画的设计实现与使用进行物理分割,让专业的人做更专业的事儿!

  • 产出某种物料:让对色彩、交互更专业的UI同学完成动画的设计、实现、优化,产出一种可供识别的物料;
  • 以某种形式直接识别、使用物料:前端研发通过某种形式直接识别该物料,调用后页面直接渲染动画,无须再配置路径动画、描边动画等;

基于这样的思考与探索,Lottie动画应运而生!

二、Lottie介绍

Lottie是一款由airbnb开源的跨平台动画渲染库,支持Android, iOS, WEB, windows平台。是专门用于解析从AE(Adobe After Effects)中通过Bodymovin插件导出的JSON文件,直接渲染动画。

Lottie官网的传送门在此点我你将见证神奇

本文的重点在于如何使用导出的jsON文件,在AE中如何开发动画以及插件Bodymovin的使用欢迎查阅其他相关资料~

一图胜千言 ~代码片段

该示例代码如下:

<!DOCTYPE html>
<html>
  <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" />
    <title>Lottie</title>
    <!-- 重点:引入Lottie JS 文件 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.9.4/lottie.min.js"></script>
    <style>
      #app {
        width: 400px;
        height: 400px;
      }
    </style>
  </head>
  <body>
    <!-- 定义动画渲染的容器 -->
    <div id="app"></div>
  </body>
  <script>
    // loadAnimation 渲染动画
    const lottieAnimationItem = lottie.loadAnimation({
      // 选取一个容器,用于渲染动画
      container: document.querySelector("#app"),
      // 定义JSON文件路径
      path: "https://assets10.lottiefiles.com/packages/lf20_l3qxn9jy.json",
      // 是否循环播放
      loop: true,
      // 渲染的格式svg/canvas/html,svg性能更优,兼容性更好
      renderer: "svg",
    });
  </script>
</html>

开发人员进行简单的配置,引入Lottie,加载相应的JSON文件,动画就实现了!简不简单,神不神奇!

专业的人做专业的事儿,后期即使UI设计MM又多动画做出了调整,做为开发的你唯一需要做的就是将文件替换一下即可!是不是又可以挽救几根头发了~

Lottie Files是一个专门针对Lottie动画设计、分享的网站。你可以在这个网站上上传自己制作的lottie动画,也可以浏览其他设计师上传的lottie动画,也可以快速体验,方便而有趣。

三、Lottie常见属性和方法

loadAnimation参数配置

属性名描述
container渲染动画所需容器
renderer动画渲染类型,svg/canvas/html
loop是否循环播放,布尔值
autoplay是否自动播放,布尔值
path一个指定的JSON文件路径,注意这里会发起一个http请求json文件
animationDataJSON动画数据,与path属性不共存

TIPS: 当设置path属性的时候,并不是简单的一个相对路径或者是绝对路径引入,而是lottie会发送一个http请求,访问这个json文件。如果是在Vue/react项目中要注意最终的打包访问路径。

考虑页面性能更优,建议使用svg渲染方式,通过path加载远程JSON文件,使用animationData会让json文件打包到JS中,

loadAnimation方法返回的对象

属性名类型描述
play() => void播放动画
pause() => void暂停动画
stop() => void停止动画
play() => void播放动画
setSpeed(number) => void设置播放速度
destroy() => void销毁动画

四、封装Lottie - React Hooks版

为了在项目中能够快速复用,将Lottie动画渲染简易封装成react组件Lottie

安装依赖

# lottie-web是针对web渲染的库
yarn add lottie-web

Lottie组件封装:

import React, { useRef, useEffect, useMemo, forwardRef, useImperativeHandle, Ref } from 'react';
import lottie, { AnimationItem } from 'lottie-web';
// 渲染类型
type rendererType = 'svg' | 'canvas' | 'html';
// 常用属性
interface IProps {
  // 是否循环播放
  loop?: boolean;
  // 渲染动画的类型
  renderer?: rendererType;
  // 是否自动播放
  autoplay?: boolean;
  // 动画渲染数据,与path互斥
  animationData?: any;
  // JSON文件路径,与animationData互斥
  path?: string;
}
export default forwardRef((props: IProps, ref: Ref<any>) => {
  // 设置props的默认值
  const { loop = true, renderer = 'svg', path = '', animationData, autoplay = true } = props;
  // 设置动画渲染的容器
  const containerEle = useRef(null);
  // 对外暴露的ref对象
  const lottieAnimation = useRef(null);
  // 指定想父级调用组件暴露的ref对象,方便元素控制当前动画的播放与暂停
  useImperativeHandle(ref, () => ({
    // 获取当前动画对象实例
    getInstance: () => lottieAnimation.current,
    // 播放,继续播放
    play: () => {
      lottieAnimation.current.play();
    },
    // 暂停动画
    pause: () => {
      lottieAnimation.current.pause();
    },
    // 停止动画,区别于暂停动画pause()
    stop: () => {
      lottieAnimation.current.stop();
    }
  }));
  // 缓存动画的相关配置
  const animationOptions = useMemo(() => {
    const options: IProps = {
      loop,
      renderer,
      autoplay
    };
    // 优先取animationData
    if (animationData) {
      options.animationData = animationData;
    } else {
      options.path = path;
    }
    return options;
  }, [loop, renderer, path, animationData, autoplay]);
  useEffect(() => {
    if (!containerEle.current) {
      return;
    }
    // 渲染动画
    const lottieAnimationItem: AnimationItem = lottie.loadAnimation({
      container: containerEle.current,
      ...animationOptions
    });
    // 将渲染后的动画示例对象赋值给lottieAnimation.current,对外暴露
    lottieAnimation.current = lottieAnimationItem;
    // 一定要注意这里的对象销毁,避免内存泄露,以及重复渲染动画
    return () => {
      // 重置为null
      lottieAnimation.current = null;
      // 销毁动画对象
      lottieAnimationItem.destroy();
    };
  }, [animationOptions]);
  // 因为lottie动画是无线宽高的,所以这里直接设置渲染的容器宽度、高度为父级元素100%即可
  return <div ref={containerEle} style={{ width: '100%', height: '100%' }}></div>;
});

五、Lottie组件的引入与调用

  • 指定path或animationData
import React, { useRef } from "react";
import "./styles.CSS";
import Lottie from "./lottie";
import animationData from "./animation.json";
export default function App() {
  // 初始化ref
  const lottieRef = useRef(null);
  return (
    <div className="App">
      {}
      <div className="container">
        <button
          onClick={() => {
            if (!lottieRef.current) {
              return;
            }
            // 暂停动画
            lottieRef.current.pause();
          }}
        >
          暂停
        </button>
        <button
          onClick={() => {
            if (!lottieRef.current) {
              return;
            }
            // 从当前状态继续向前播放
            lottieRef.current.play();
          }}
        >
          播放
        </button>
        <button
          onClick={() => {
            if (!lottieRef.current) {
              return;
            }
            // 停止动画,恢复到初始状态,注意与pause()方法的区别
            lottieRef.current.stop();
          }}
        >
          停止
        </button>
        <Lottie ref={lottieRef} path="https://assets10.lottiefiles.com/packages/lf20_l3qxn9jy.json"></Lottie>
      </div>
      {}
      <div className="container">
        <Lottie animationData={animationData}></Lottie>
      </div>
    </div>
  );
}

codesandbox地址:codesandbox.io/s/funny-res…

效果图:

结语

以上就是Lottie动画前端开发使用技巧的详细内容,更多关于前端开发Lottie动画的资料请关注编程网其它相关文章!

--结束END--

本文标题: Lottie动画前端开发使用技巧

本文链接: https://lsjlt.com/news/152293.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Lottie动画前端开发使用技巧
    目录一、为什么会有Lottie动画呢?二、Lottie介绍三、Lottie常见属性和方法四、封装Lottie - React Hooks版五、Lottie组件的引入与调用结语一、为什...
    99+
    2024-04-02
  • Lottie动画前端开发使用技巧实例分析
    本文小编为大家详细介绍“Lottie动画前端开发使用技巧实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Lottie动画前端开发使用技巧实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、为什么会有...
    99+
    2023-07-02
  • 前端开发中11个JS使用技巧
    这篇“前端开发中11个JS使用技巧”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“前端开发中11个JS使用技巧”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入...
    99+
    2023-06-06
  • 有哪些实用的前端开发技巧
    本篇内容介绍了“有哪些实用的前端开发技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1. 利...
    99+
    2024-04-02
  • 前端开发中常用技巧有哪些
    这篇文章主要为大家展示了“前端开发中常用技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“前端开发中常用技巧有哪些”这篇文章吧。文章标题列表中日期居右显示的方法: 代码如下:<p&g...
    99+
    2023-06-08
  • Web前端开发小技巧有哪些
    这篇文章主要介绍了Web前端开发小技巧有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。xml文件尽量以utf-8编码,gb2312有些字是存储不了的,如,就算能存也需要转...
    99+
    2023-06-08
  • 前端开发有哪些Sublime Text应用技巧
    这篇文章主要讲解了“前端开发有哪些Sublime Text应用技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“前端开发有哪些Sublime Text应用技...
    99+
    2024-04-02
  • 如何快速掌握前端开发技巧
    这篇文章将为大家详细讲解有关如何快速掌握前端开发技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何高效学习H5前端开发?首先要学的是学HTML、CSS,这两个东西是一...
    99+
    2024-04-02
  • Go语言前端开发技巧大揭秘
    Go语言作为一种快速、高效的编程语言,不仅在后端开发中被广泛使用,而且在前端开发中也有着一席之地。本文将揭示一些Go语言前端开发的技巧,通过具体的代码示例来帮助读者更好地掌握这些技巧。...
    99+
    2024-03-10
    技巧 go语言 前端开发
  • C#开发经验分享:前端与后端协同开发技巧
    作为一名 C# 开发者,我们的开发工作通常包括前端和后端的开发,而随着技术的发展和项目的复杂性提高,前端与后端协同开发也变得越来越重要和复杂。本文将分享一些前端与后端协同开发的技巧,以帮助 C# 开发者更高效地完成开发工作。确定好接口规范前...
    99+
    2023-11-23
    前端 技巧 C#开发 后端协同
  • 前端开发常用CSS动画代码有哪些
    这篇文章主要介绍“前端开发常用CSS动画代码有哪些”,在日常操作中,相信很多人在前端开发常用CSS动画代码有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”前端开发常用CS...
    99+
    2024-04-02
  • Javascript动画插件lottie-web的使用方法
    lottie可以将一个json数据渲染成一个动画,而且支持多平台,在不同的平台下使用同一个json文件即可实现相同的效果,非常的方便。这里介绍前端的使用方法。https://gith...
    99+
    2024-04-02
  • Web前端开发的JavaScript小技巧有哪些
    本篇内容介绍了“Web前端开发的JavaScript小技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • 前端开发实用且少见的技巧有哪些
    小编给大家分享一下前端开发实用且少见的技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、快速隐藏要隐藏一个DOM元素,不需要JavaScript。一个原...
    99+
    2023-06-20
  • React Native项目中使用Lottie动画的方法
    Lottie是Airbnb开源的一个面向iOS、Android、React Native的动画库,能加载Adobe After Effects导出的动画,并且能让原生App像使用静态...
    99+
    2024-04-02
  • 前端开发必知的jQuery小技巧有哪些
    这篇文章主要介绍前端开发必知的jQuery小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、返回顶部按钮通过使用jQuery中的animate 和scrollTop 方法...
    99+
    2024-04-02
  • 移动前端开发和Web前端开发的区别
    一、技术栈的区别 Web前端开发:Web前端开发主要使用HTML、CSS、JavaScript等技术进行开发,通常还会使用Vue、React、Angular等前端框架来提高开发效率。 移动前端开发:移动前端开发除了使用H...
    99+
    2023-10-29
    区别 Web
  • 13 个实用CSS技巧,助你提升前端开发效率!
    本篇文章整理分享13 个前端可能用得上的 CSS技巧,包括修改输入占位符样式、多行文本溢出、隐藏滚动条、修改光标颜色等,希望对大家有所帮助!修改输入占位符样式、多行文本溢出、隐藏滚动条、修改光标颜色、水平和垂直居中。多么熟悉的场景!前端开发...
    99+
    2023-05-14
    css 前端
  • 提升前端开发效率的CSS技巧有哪些
    今天小编给大家分享一下提升前端开发效率的CSS技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 解决图片5px间...
    99+
    2023-07-05
  • 优化网站性能的前端开发必备技巧
    前端开发作为网站设计与开发的重要一环,扮演着连接用户和网站的桥梁角色。而在如今信息量爆炸的互联网时代,用户对于网站性能的要求越来越高。因此,了解并掌握一些提高网站性能的实用技巧,成为了前端开发人员的重要任务之一。本文将为大家揭示...
    99+
    2024-02-02
    前端开发 网站性能 秘密武器 css布局
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作