文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从零开发一套基于React的加载动画库

2024-12-02 17:32

关注

之前在项目开发中经常会遇到需要开发各种各样加载动画的需求, 我们可以使用已有的动画库手动改造实现(比如说基于 loaders.css 手动改造), 也可以自己独立设计, 但是这意味着需要花一定的时间调研和开发.

为了减少这部分的时间, 并让加载动画的设计更加简化和易用, 我开发了一款开箱即用的加载动画库 react-loading, 内置了多种风格的加载动画, 开发者可以轻松选择自己需要的动画, 并一键安装到自己的项目中, 简单又轻量.

github地址: https://github.com/MrXujiang/react-loading

接下来就和大家一起介绍一下这个动画库.

技术实现

@alex_xu/react-loading 是基于 loaders.css 二次封装的 React 加载动画组件库, 帮你轻松的在项目中使用不同风格的加载动画.

demo.gif

从技术上, 为了让使用者使用的更轻量简单, 我将 loaders.css 的每个动画样式和元素拆成了一个个动画组件, 并设计了相对灵活的 api 接口, 使得开发者可以更简单高效的使用, 如下:

组件设计

该动画组件库采用 React Hooks 和 Typescript 实现, 分为 Loader 容器 和 Spining .

Loader 容器主要是对加载动画做整体封装, 使得我们对 Spining 动画组件的使用更简单, Spining 主要提供动画 “骨架” . Loader 具体实现如下:

  1. import React from 'react'
  2. import { ILoadingProp } from '../type'
  3. import './index.less'
  4.  
  5. const Loader: React.FC = ({ 
  6.   text, 
  7.   visible = true
  8.   textOffset, 
  9.   textColor, 
  10.   style, 
  11.   children, 
  12. }) => { 
  13.   return visible ? ( 
  14.     "react-loader-wrap" style={style}> 
  15.       {children} 
  16.       {!!text && ( 
  17.         
  18.           className="react-loader-text-tip" 
  19.           style={{ marginTop: `${textOffset}px`, color: textColor }} 
  20.         > 
  21.           {' '
  22.           {text}{' '
  23.         
 
  •       )} 
  •     
  •  
  •   ) : null
  • }; 
  •  
  • export default Loader; 
  • Spining 动画组件主要是具体的动画内容, 这里我选取了 10 余种动画进行封装, 我举一个 BallBeat 的例子:

    1. import React, { memo } from 'react'
    2. import Loader from '../Loader'
    3. import { ILoadingProp } from '../type'
    4. import './style'
    5.  
    6. export default memo( 
    7.   ({ text, style, color, textColor, size, visible }: ILoadingProp) => { 
    8.     return ( 
    9.        
    10.         "ball-scale"
    11.           
    12.             style={{ 
    13.               backgroundColor: color, 
    14.               width: `${size}px`, 
    15.               height: `${size}px`, 
    16.             }} 
    17.           > 
    18.          
    19.        
    20.     ); 
    21.   }, 
    22. ); 

    在项目中具体使用方式如下:

    1. import { BallPulse, BallClipRotate, SquareSpin } from '@alex_xu/react-loading'
    2.  
    3. export default () => "H5-Dooring" />; 

    按需导入配置:

    1. extraBabelPlugins: [ 
    2.     [ 
    3.       'babel-plugin-import'
    4.       { 
    5.         libraryName: '@alex_xu/react-loading'
    6.         libraryDirectory: 'es'
    7.         camel2DashComponentName: false
    8.         style: true
    9.       }, 
    10.     ], 
    11.   ], 

    后续会持续丰富加载动画库, 包括骨架屏动画等, 欢迎大家使用 并 star 支持~

     

    github地址: https://github.com/MrXujiang/react-loading

     

    来源: 趣谈前端内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯