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 相关文章推荐
window.open打开页面居中显示的示例代码
Dec 27 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
jQuery DOM操作实例
Mar 05 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
jquery实现动静态条形统计图
Aug 17 Javascript
详解Javascript事件驱动编程
Jan 03 Javascript
基于javascript实现彩票随机数生成(简单版)
Apr 17 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
JavaScript每天必学之数组和对象部分
Sep 17 Javascript
在ABP框架中使用BootstrapTable组件的方法
Jul 31 Javascript
微信小程序云开发如何使用npm安装依赖
May 18 Javascript
JavaScript如何实现图片处理与合成
May 29 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
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php smarty函数扩展
2010/03/15 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
vue实现验证码输入框组件
2017/12/14 Javascript
js实现简单模态框实例
2018/11/16 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
python socket 超时设置 errno 10054
2014/07/01 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
python调用其他文件函数或类的示例
2019/07/16 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
英国领先的游戏零售商:GAME
2019/09/24 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
夜班门卫岗位职责
2013/12/09 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js