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(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 Javascript
jQuery UI的Dialog无法提交问题的解决方法
Jan 11 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
Aug 27 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 Javascript
jquery+javascript编写国籍控件
Feb 12 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
Jun 25 Javascript
详解jquery easyui之datagrid使用参考
Dec 05 Javascript
js每隔两秒输出数组中的一项(实例)
May 28 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
Vue.js实现列表清单的操作方法
Nov 15 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
Jan 08 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 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编程效率的方法
2013/11/07 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
javascript 的Document属性和方法集合
2010/01/25 Javascript
web前端开发也需要日志
2010/12/09 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
如何使用python操作vmware
2019/07/27 Python
python支付宝支付示例详解
2019/08/22 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
html5画布旋转效果示例
2014/01/27 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
平安校园建设方案
2014/05/02 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
基层工作经验证明样本
2014/11/16 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
python解析json数据
2022/04/29 Python