web-loading
TypeScript icon, indicating that this package has built-in type declarations

1.5.2 • Public • Published

web-loading

web-loading logo

基于 Canvas 的高性能 Web 加载动画库,为您的应用提供丝滑加载效果

license npm stars

🔥 特性

  • 💪 基于 Canvas 绘制,性能优异
  • 🔥 使用 TypeScript 编写,提供完整的类型定义
  • 📦 开箱即用的多种加载动画效果
  • 🌈 支持三种挂载模式:DOM、全屏、移动端
  • 👓 提供完整的生命周期钩子函数
  • ⚡ 支持自定义动画模型

📋 更新日志

  • 优化源码文件结构
  • 新增无感刷新功能
  • 解决秒关闪屏bug
  • 更换打包方式,引入路径有变化

🎬 官方文档

查看官方文档和示例

介绍

Web 中实现 loading 的方式有很多种,例如使用css动画、js操作元素、gif图片、svg动画、ui框架中自带loading等等,各有所优,操作元素可能更方便,但会影响性能或其他元素,动态图片性能很好,但自定义不理想。

WebLoading 是一个基于 web 封装的loading动画插件,主要model是通过Canvas绘制,这种方式不会影响到界面中的元素,当然,WebLoading也提供了html配置兼容了html加载方式。默认的model模块都提供了独自的options配置属性,如果想更贴近业务可以使用Custom进行自定义,WebLoading提供了BaseModel 继承class让你更方便自定义自己的loading,或者html加载方式。

实现

WebLoading中每一个model都是使用Canvas绘制,启动方式分别有DOM(元素挂载)、FULL(全屏)、MINI(移动端)。

原理大同小异,这里以DOM来讲述,首先我们需要initLoading初始化你需要渲染的model并提供自定义参数,当然,这个操作不是必须的,因为WebLoading已经初始化所有的默认数据,此时抛出操作WebLoading相关函数。

启动WebLoading调用loading函数需要一个HtmlElement元素,该元素必须拥有children,而不是一个单标签元素。启动WebLoading时会获取到这个挂载的元素,并在children添加一个Canvas,同时会计算该元素位置以及大小以最优显示同步到Canvas上。WebLoading会根据options参数来绘制具体的modelmodel中主要以requestAnimationFrame来进行递归回调渲染,以此来实现每一帧动画。

注意:如果配置是通过html渲染,那么就不会走上一步。

WebLoading封装上主要分隔三层

  • 交互层:开发者与WebLoading的操作,例如初始化、启动、关闭、获取相关信息等等。
  • 逻辑层:获取到WebLoading接收options后进行初始化挂载的元素以及canvas等等。
  • model 层:继承BaseModel获取初始化后的canvas进行绘制模块。

安装

根据自己的包管理工具下载。

npm install web-loading

使用

CDN引入

<script src="https://cdn.jsdelivr.net/npm/web-loading"></script>
<script>
	const webLoading = window.fullLoading({})
    // initLoading、fullLoading、miniLoading都绑定在window上...
</script>

工程项目引入

import type { LoadingType } from "web-loading";
import { initLoading } from "web-loading";
let webLoading: LoadingType = initLoading({
  // 自定义options
})
  • 参数
    • options?:OptionsType
  • 返回
    • webLoading:LoadingType

获取元素

// 无框架情况
let dom = document.querySelector('xxx')
// vue
let dom = ref()
// ...如果是FULL或MINI不需要获取元素

启动

// 注意:在dom加载完成后再调用loading
window.onload = function () {
  webLoading.loading(dom)
}

参数

  • dom:挂载的HtmlElement元素

  • options?:OptionsType,支持覆盖options

启动方式

DOMFULLMINI三种启动方式都需要基于HtmlElement,这里FULLMINI是扩展的启动方式,参数中无须提供HtemlElment,是因为WebLoading已经处理的元素的创建到消失的流程。

import type { LoadingType } from "web-loading";
import { fullLoading,miniLoading LOADING_TYPES } from "web-loading";

let webLoading: LoadingType = fullLoading() // 全屏
// let webLoading: LoadingType = miniLoading() // 移动端

// 启动(如果是MINI或者FULL无需传递dom)
webLoading.loading()

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
1.5.25latest

Version History

VersionDownloads (Last 7 Days)Published
1.5.25
1.5.02
1.4.253
1.4.242
1.4.231
1.4.220
1.4.211
1.4.200
1.4.191
1.4.170
1.4.160
1.4.150
1.4.131
1.4.20
1.4.11
1.4.01
1.3.280
1.3.270
1.3.260
1.3.250
1.3.240
1.3.231
1.3.220
1.3.210
1.3.200
1.3.190
1.3.150
1.3.141
1.3.130
1.3.120
1.3.110
1.3.101
1.3.90
1.3.80
1.3.70
1.3.60
1.3.50
1.3.40
1.3.30
1.3.20
1.3.11
1.3.00
1.2.90
1.2.80
1.2.70
1.2.61
1.2.51
1.2.41
1.2.31
1.2.21
1.2.11
1.2.01
1.1.90
1.1.81
1.1.71
1.1.60
1.1.50
1.1.40
1.1.31
1.1.20
1.1.10
1.1.00

Package Sidebar

Install

npm i web-loading

Weekly Downloads

32

Version

1.5.2

License

ISC

Unpacked Size

375 kB

Total Files

17

Last publish

Collaborators

  • tmm-tommy