一步搞定NProgress监控页面滚动进度并且到尽头不消失

最近在写一个博客网站,我想设计一个上方有滚动条的效果,根据我滚动页面的位置计算出一个百分比,从而上方滚动条也滚动到相对应的位置。但是期间出现了几个小毛病,例如我没有滚动页面为什么滚动条会自己慢慢的增加着走呢,或者滚动到页面最后面滚动条就自己消失了。兄台莫急,请听我慢慢道来~~~
效果如图:
在这里插入图片描述

一、安装

npm install --save nprogress
或
yarn add nprogress

二、使用

1. 作为加载进度条
在Vue入口文件 main.js 中引入 nprogress
此处注意: minimum必须为0,否则就会出现自增的现象

import NProgress from 'nprogress' //引入 nprogress 插件
NProgress.configure({
    
    showSpinner: false});
NProgress.configure({
    
    minimum:0});
NProgress.configure({
    
    ease:'linear',speed:100});

切换路由时进行加载(也是在main.js中)

//当路由进入前
router.beforeEach((to, from, next) => {
    
    
  // 每次切换页面时,调用进度条
  NProgress.start();
  // 这个一定要加,没有next()页面不会跳转的。这部分还不清楚的去翻一下官网就明白了
  next();
});
//当路由进入后:关闭进度条
router.afterEach(() => {
    
    
  // 在即将进入新的页面组件前,关闭掉进度条
  NProgress.done()
})

2. 作为页面滚动进度条
在 App.vue 中
注意: 在css样式中,一定得把下面这个样式加上否则会出现下面这种‘bug’

#nprogress .peg {
    
    
  box-shadow: 0 0 10px #dd181800, 0 0 5px #c2282800 !important;
}

如图:

可以看到滚动条头部出现莫名其妙的一个有了角度的方块,真是让人头疼

<template>
  <div id="app">
    <router-view />
  </div>
</template>
<script>
import NProgress from "nprogress"; // 导入nprogress(因为在main.js 中已经导入样式,这里不需要再次导入)
export default {
    
    
  name: "App",
  mounted() {
    
    
    window.addEventListener("scroll", this.handleScroll); // 监听滚动条事件
  },
  methods: {
    
    
    handleScroll() {
    
    
      // 屏幕剩余的高度
      let surplus =
        document.documentElement.scrollHeight -
        document.documentElement.clientHeight;
      // 当前滑动高度
      let scrollY = document.documentElement.scrollTop;
      // 当前位置百分比小数
      let coorY = scrollY / surplus;
      // 设置导航栏,这里使用NProgress.set() 动态更改进度条
      NProgress.set(coorY);
    },
  },
};
</script>
<style>
#nprogress .bar {
    
    
  background: orange !important;
  height: 3px !important;
}
#nprogress .peg {
    
    
  box-shadow: 0 0 10px #dd181800, 0 0 5px #c2282800 !important;
}
</style>

三、配置项

1. 更改默认样式:
在 App.vue 中

<style>
#nprogress .bar{
    
     //自定义进度条颜色
  background: orange !important; 
}
#nprogress .peg {
    
     // 自定义辅助阴影颜色,这里默认为透明
  box-shadow: 0 0 10px #00000000, 0 0 5px #00000000 !important; 
}
</style>

2. 配置NProgress:
showSpinner:进度环显示隐藏

NProgress.configure({
    
    showSpinner: false});

ease:调整动画设置,ease可传递CSS3缓冲动画字符串(如ease、linear、ease-in、ease-out、ease-in-out、cubic-bezier)。speed为动画速度(单位ms)

NProgress.configure({
    
    ease:'ease',speed:1000});

minimum:设置进度条最低百分比

NProgress.configure({
    
    minimum:0.0});

百分比:通过设置progress的百分比,调用 .set(n)来控制进度,其中n的取值范围为0-1

NProgress.set(0.4);

四、阅读源码解决上面问题

在node_modules中找到nprogress文件夹
在这里插入图片描述
找到nprogress.js文件,修改以下内容就能解决滚动条滚动到最后就自己消失的毛病
在这里插入图片描述
当然你也能在css文件夹下看的滚动条的默认样式,同时能看见#nprogress .peg中确实加了个旋转的样式
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_53461589/article/details/130782973