Vue中nprogress页面加载进度条的方法实现


Posted in Javascript onNovember 13, 2020

nprogress页面加载进度条

前言

很多时候在访问网页的时候我们总是看到页面在加载中,可以却不知道要加载多久,无期限的等待总是让人烦躁不安,所以我们希望能知道网页加载的进度,这样我们就能做到心中有数是否继续等待页面加载。这个功能我们可以依靠nprogress来实现,它是轻量级的进度条组件,使用简便,可以很方便集成到应用中来。

Vue中nprogress页面加载进度条的方法实现

安装nprogress

直接在项目中执行安装命令:npm install --save nprogress

Vue中nprogress页面加载进度条的方法实现

nprogress方法

NProgress.start() // 进度条开始
NProgress.set() // 将进度设置到具体的百分比位置,取值范围是0到1.0
NProgress.inc() // 如果少量增加进度,进度将永远不会得到100%
NProgress.done() // 进度条结束消失
NProgress.configure() // 进度条参数配置

全局引入nprogress

在main.js中引入nprogress插件和样式,

import NProgress from ‘nprogress' // nprogress插件
import ‘nprogress/nprogress.css' // nprogress样式

配置nprogress

在NProgress.configure({})中我们可以对nprogress进行适当的配置,showSpinner 为 false(禁用进度环)、trickle 为 false(关闭进度条步进)、trickleRate (每次步进增长多少)、trickleSpeed (步进间隔,单位毫秒ms)、ease(动画方向)、speed (动画速度,单位毫秒ms)、minimum (最小百分比)等等。

NProgress.configure({ showSpinner: false }) //我这里只关闭进度环

Vuerouter路由钩子

在添加nprogress之前我们需要先了解VuerouterbeforeEachafterEach钩子函数,这是在路由跳转的时候对路由进行一些权限判断或者其他操作时定义的处理函数,Vue.beforeEach是在跳转之前执行,Vue.afterEach是在跳转之后执行判断的。

Vue.beforeEach(function(to,form,next){})函数有三个参数,Vue.afterEach(function(to,form))函数有两个参数:

to:即将进入的路由对象

from:当前导航即将离开的路由对象

next:调用该方法,进入下一个钩子函数,next(false):则中断当前的导航。

在路由中添加nprogress

在main.js中全局钩子函数,在路由跳转前用NProgress.start()标记下进度条开始,在路由跳转后用NProgress.done()标记下结束,这样在路由跳转的时候就可以在页面顶部看到一个progress bar进度条了

import Vue from 'vue'
import App from './App.vue'
import router from '@/router/index.js'
import store from './store'
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import '@/assets/icons/index.js'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
Vue.use(Element)
Vue.config.productionTip = false
NProgress.configure({ showSpinner: false })
router.beforeEach((to, from, next) => {
 NProgress.start()
 next()
})
router.afterEach(() => {
 NProgress.done()
})
new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')

在请求中添加nprogress

如果你希望每次发送请求的时候也出现进度条的话可以在axios封装中的路由拦截中添加nprogress

// 请求拦截器(请求发出前处理一些请求)
axios.interceptors.request.use( 
 NProgress.start()
})
// 响应拦截器(处理响应数据)
axios.interceptors.response.use(
 NProgress.done()
)

为了让结构更滑清晰简洁些,我们重新整理下代码,即然nprogress主要是用在路由跳转上,这里我将nprogress归纳放入router中,切记实例化router之后调用Vuerouter的beforeEach与afterEach钩子函数生效。

import Vue from 'vue'
import Router from 'vue-router'
import routers from './routers'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
NProgress.configure({ showSpinner: false })
Vue.use(Router)
const router = new Router({
 mode: 'history',
 routes: routers
})
export default router
 
router.beforeEach((to, from, next) => {
 NProgress.start()
 next()
})
router.afterEach(() => {
 NProgress.done()
})

修改nprogress样式

在app.vue中添加如下样式即可修改nprogress样式,记得添加 !important来覆盖原有样式

#nprogress .bar {
 background: #66B1FF !important; // 自定义颜色
 height: 20px !important; // 自定义高度
 }

参考 https://www.toutiao.com/i6718992880599302659/?group_id=6718992880599302659

到此这篇关于Vue中nprogress页面加载进度条的方法实现的文章就介绍到这了,更多相关Vue nprogress加载进度条内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
jquery实现点击文字可编辑并修改保存至数据库
Apr 15 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
vue.js element-ui tree树形控件改iview的方法
Mar 29 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
JS高级技巧(简洁版)
Jul 29 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
微信小程序顶部导航栏可滑动并选中放大
Dec 05 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 Javascript
解决vue打包 npm run build-test突然不动了的问题
Nov 13 #Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 #Javascript
解决vuex刷新数据消失问题
Nov 12 #Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 #Javascript
解决vuex改变了state的值,但是页面没有更新的问题
Nov 12 #Javascript
javascript实现搜索筛选功能实例代码
Nov 12 #Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 #Javascript
You might like
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
php 小乘法表实现代码
2009/07/16 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
PHP目录操作实例总结
2016/09/27 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python map和reduce函数用法示例
2015/02/26 Python
详解Python中的type()方法的使用
2015/05/21 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
python实现梯度法 python最速下降法
2020/03/24 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
安全生产月活动总结
2014/05/04 职场文书
2014年化验室工作总结
2014/11/21 职场文书
烟台的海导游词
2015/02/02 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
教你一步步实现一个简易promise
2021/11/02 Javascript
python套接字socket通信
2022/04/01 Python
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android