龙空技术网

「前端开发」页面加载进度条组件:nprogress.js 使用教程案例

小兵刚出道 37

前言:

今天我们对“html页面加载进度条”大致比较关注,姐妹们都需要剖析一些“html页面加载进度条”的相关知识。那么小编同时在网络上收集了一些对于“html页面加载进度条””的相关知识,希望朋友们能喜欢,咱们一起来了解一下吧!

一、简介

NProgress.js 是一个轻量级的 JavaScript 库,用于在应用的页面顶部显示一个进度条,指示页面加载或异步操作的进度。它非常适合用于单页面应用程序(SPA),能够在路由变化时给用户友好的加载提示。本文是 NProgress.js 的基本使用方法一些配置选项的详细介绍。

我们进入到官网首页,即可发现 nprogress 进度条的几个核心功能

(当然,我们也是可以针对进度条进行个性化的设置的,请继续看下文演示)

显示自身进度条;手动设置进度条的进度;动态控制调整进度条的进度;直接完成进度条进度,然后隐藏进度条;

二、使用案例教程(0)前提说明

由于本文章是为了简化上手难度,我这直接使用了 CDN 的方式引入第三方的 JS 和 CSS 文件来安装,已达到快速使用和演示的目的,如果需要使用 npm 的方式如下自行对应学习即可。

【1】CDN 方式安装 nprogress.js

直接在 HTML 文件中引入对应 <script> 标签即可,如下:

<link rel="stylesheet" href=";><script src=";></script>
【2】NPM 或 yarn 方式安装 nprogress 库到本地
# 方式1:电脑需要安装 nodenpm install nprogress -S# 方式2:可以基于 电脑安装了 node 之后,再安装 yarn (为什么要安装 yarn?仁者见仁智者见智哈)## 2.1 第一步: npm install --global yarn## 2.2 第二步:yarn --version # 验证是否安装 yarn 成功yarn add nprogress
(1)基础版0:初步简单案例

这里我们是为了简单的使用和方便展示,我们直接使用 CDN 的方式直接在 HTML 文件内容中引入对应的JS 和 CSS 文件哈。如下两个步骤:

第一步:引入对应的 nprogress 的 JS 和 CSS 文件;第二步:需要在 <script> 标签内部引入对应的 NProgess 对象进行简单的配置即可。

以下就是完整的页面加载进度条完整源码,内容如下:

<!DOCTYPE html><html>	<head>		<meta charset="utf-8">		<title></title>		<link rel="stylesheet" href=";>		<script src=";></script>    </head>	<body>				<script type="text/javascript">			NProgress.configure({ showSpinner: true }); // 是否显示旋转加载组件			NProgress.start(); // 显示进度条						// 模拟页面加载延迟			setTimeout(function() {			    NProgress.done(); // 隐藏进度条			}, 2000);		</script>	</body></html>

演示效果如下:

演示内容源码说明:

NProgress.configure({ showSpinner: true });】含义:用于定义 加载显示是否显示旋转空间。这里你可以直接 定义 showSpinner:false 不多余显示旋转条即可。NProgress.start();】 含义:启动进度条NProgress.done();】含义:结束进度条 (或者 说是 隐藏进度条)

(2)升级版1:增加设置进度条样式

我们从基础的简单案例中我们可以看到,默认是浅蓝色的进度条组件。这里有时候我们在实际业务中会需要设置不同的系统皮肤,此时如果还是浅蓝色的有可能会出现与系统不符合的问题,所以,我们来一起看看如何设置颜色、大小、位置等样式:

<!-- 很简单:通过添加 CSS 样式来自定义进度条的颜色和其他视觉效果。 --><style type="text/css">    #nprogress .bar {        background: yellow !important; /* 自定义颜色 */    }</style>

为了你更清晰且方便全面的了解,完整的代码展示如下:

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>        <link rel="stylesheet" href=";>        <script src=";></script>        <style type="text/css">            #nprogress .bar {                background: yellow !important; /* 自定义颜色 */            }        </style>	    </head>    <body>        <script type="text/javascript">            NProgress.configure({                showSpinner: false            });            NProgress.start(); // 显示进度条            // 模拟页面加载延迟            setTimeout(function() {                NProgress.done(); // 隐藏进度条            }, 2000);// (毫秒)        </script>    </body></html>

对应的亲测演示效果展示如下:

(3)升级版2:自定义进度条和旋转组件样式示例

需要达成的效果展示:

完整源码如下:

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>        <link rel="stylesheet" href=";>        <script src=";></script>        <style type="text/css">            #nprogress .bar {                background: greenyellow !important; // 自定义颜色             }            /* 旋转加载组件 */            #nprogress .spinner {                display: block;                position: fixed;                z-index: 1031;                color: red;                top: 15px;                right: 50%;            }            /* 旋转加载组件 ICON 图标自定义样式 */            #nprogress .spinner-icon {                width: 50px;                height: 50px;                /* 旋转组件粗细 */                border: solid 8px transparent;                /* 红色 */                border-top-color: red;                /* 浅蓝色 */                border-left-color: #29d;                border-radius: 50%;                -webkit-animation: nprogress-spinner 400ms linear infinite;                animation: nprogress-spinner 400ms linear infinite;            }        </style>    </head>    <body>        <script type="text/javascript">            NProgress.configure({                easing: 'ease', // 动画方式                speed: 5000, // 递增进度条的速度                showSpinner: true, // 是否显示加载指示器                trickle: false, // 是否开启自动递增行为                trickleSpeed: 200, // 自动递增间隔                minimum: 0.3, // 更改启动时使用的最小百分比                parent: 'body', // 指定进度条的父容器                barSelector: '[role="bar"]', // 进度条选择器                spinnerSelector: '[role="spinner"]' // 加载指示器选择器            });            NProgress.start(); // 显示进度条            // 模拟页面加载延迟            setTimeout(function() {                NProgress.done(); // 隐藏进度条            }, 200);        </script>    </body></html>

扩展:其他的样式自定义,我们可以通过直接进入打开 nprogress.css 样式文件,按照指定的 nprogress.css 进行调整覆盖处理。

(4)升级版3:设置进度条的递增速度

我们基于【基础版0】,通过上述的案例,我们发现:进度条的显示度是由慢到快的,如果我们手动控制根据实际情况来处理呢?又会是什么样的效果呢?我们一起来看:

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>        <link rel="stylesheet" href=";>        <script src=";></script>        <style type="text/css">            #nprogress .bar {                background: yellow !important; // 自定义颜色             }        </style>    </head>    <body>        <script type="text/javascript">            NProgress.configure({                showSpinner: false, // 不现实多余的旋转加载组件                speed: 5000, // 【核心】递增进度条的速度(毫秒)            });            NProgress.start(); // 显示进度条            // 模拟页面加载延迟            setTimeout(function() {                NProgress.done(); // 隐藏进度条            }, 200);        </script>    </body></html>

展示效果如下:

(5)升级版4:指定加载的父级元素

我们基于【升级版1】,指定加载到的父级元素标签,默认是 <body>,我们可以指定到其他的加载元素中,例如自定义的 <div> 中通过元素选择器指定上级元素即可,如下演示示意图:

完整示例源码如下:

<!DOCTYPE html><html>	<head>		<meta charset="utf-8">		<title></title>		<link rel="stylesheet" href=";>		<script src=";></script>		<style type="text/css">			#nprogress .bar {				background: blue !important; // 自定义颜色 			}			#nprogressDiv {				width: 99%;				height: 10px;				background-color: #ff0000			}		</style>	</head>	<body>		<!-- 这是一个容纳进度条的上级组件 -->		<div id="nprogressDiv"></div>		<script type="text/javascript">			NProgress.configure({				showSpinner: false,				parent: '#nprogressDiv', // 指定进度条的父容器			});			NProgress.start(); // 显示进度条			// 模拟页面加载延迟			setTimeout(function() {				NProgress.done(); // 隐藏进度条			}, 2000); //(毫秒)		</script>	</body></html>
(6)业务场景使用:请求进度 和 页面跳转加载 显示进度条【1】场景一:页面加载进度

在页面加载(如 SPA 的路由跳转)时自动显示和隐藏进度条。

// 1.假设你使用的是 Vue、React 或其他框架的路由系统  // 监听路由变化  router.beforeEach((to, from, next) => {    NProgress.start(); // 页面跳转前开始进度条    next();  });    router.afterEach(() => {    NProgress.done(); // 页面跳转后完成进度条  });// 2.如果是原生的js HTML页面,我们可以使用如下内容进行监听,页面加载完毕即进度条完成。document.addEventListener('DOMContentLoaded', function() {    // 在这里编写您需要执行的业务逻辑    console.log('DOM 内容加载完毕');    NProgress.done();});
【2】场景二: Axios 请求加载显示进度条对于 Ajax 请求,你可以在请求开始时显示进度条,在请求完成时隐藏它。值得注意:一般vue,angular,react 再请求的时候会又这种进度条配置的。
// 使用 Axios 作为示例  axios.interceptors.request.use(function (config) {      NProgress.start(); // 发送请求前开始进度条      return config;  }, function (error) {      // 请求错误处理      return Promise.reject(error);  });  axios.interceptors.response.use(function (response) {      NProgress.done(); // 请求完成后完成进度条      return response;  }, function (error) {      // 响应错误处理      NProgress.done(); // 即使发生错误,也完成进度条      return Promise.reject(error);  });
三、扩展:在 Vue 中使用示例Vue 项目中,可以将 NProgress.js 集成到路由系统中,方便页面跳转时显示进度条。 router/index.js 中引入 NProgress 并在路由卫士中调用相应的 API。
import NProgress  from 'nprogress'import 'nprogress/nprogress.css'// 导入进度条import { start, close } from '../utils/nprogress';const router = new VueRouter({    // ...});router.beforeEach((to, from, next) => {    NProgress.start();    next();});router.afterEach(() => {    NProgress.done();});
总结

NProgress.js 使用一种简单的方式来改善用户体验,在单页应用中,通过在页面跳转期间显示进度条,可以让用户知道页面正在努力加油加载中,从而减少用户的等待焦虑感。好啦,如果想更加详细和完全的定制化自己的进度条不妨试试看看 nprogress.css 文件,只需要覆盖次样式文件即可,或者你想再深入你可以看看附录中的开源地址哦,祝你学习愉快!(*-∀-)ノYes~

至此,相信你已经基本了解并可以基本在项目中使用 NProgress.js 了。我们下篇文章见

附录官网地址:NProgress: slim progress bars in JavaScriptGithub开源地址:GitHub - rstacruz/nprogress: For slim progress bars like on YouTube, Medium, etc

标签: #html页面加载进度条