当前位置:首页 > VUE

vue实现页面加载进度

2026-01-23 11:42:31VUE

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

使用 NProgress 库

安装 NProgress 库:

npm install nprogress

在 Vue 项目中引入并使用:

vue实现页面加载进度

import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 在路由守卫中调用
router.beforeEach((to, from, next) => {
  NProgress.start()
  next()
})

router.afterEach(() => {
  NProgress.done()
})

自定义进度条组件

创建一个全局进度条组件:

<template>
  <div class="progress-bar" :style="{ width: progress + '%' }"></div>
</template>

<script>
export default {
  data() {
    return {
      progress: 0
    }
  },
  methods: {
    start() {
      this.progress = 0
      const interval = setInterval(() => {
        this.progress += 10
        if (this.progress >= 100) {
          clearInterval(interval)
        }
      }, 200)
    },
    finish() {
      this.progress = 100
      setTimeout(() => {
        this.progress = 0
      }, 500)
    }
  }
}
</script>

<style>
.progress-bar {
  height: 3px;
  background-color: #42b983;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 9999;
  transition: width 0.3s;
}
</style>

使用 Vue Router 的导航守卫

结合路由变化显示加载状态:

vue实现页面加载进度

const router = new VueRouter({
  routes
})

router.beforeEach((to, from, next) => {
  // 显示加载状态
  store.commit('setLoading', true)
  next()
})

router.afterEach(() => {
  // 隐藏加载状态
  setTimeout(() => {
    store.commit('setLoading', false)
  }, 500)
})

监听页面资源加载

通过 window.onload 事件检测页面完全加载:

mounted() {
  window.onload = () => {
    // 页面完全加载后执行的操作
    this.loading = false
  }
}

使用 Axios 拦截器

为 AJAX 请求添加加载状态:

axios.interceptors.request.use(config => {
  // 请求开始时显示加载状态
  store.commit('setLoading', true)
  return config
})

axios.interceptors.response.use(response => {
  // 请求完成后隐藏加载状态
  store.commit('setLoading', false)
  return response
}, error => {
  store.commit('setLoading', false)
  return Promise.reject(error)
})

每种方法适用于不同场景,NProgress 提供开箱即用的解决方案,自定义组件更灵活,路由守卫适合SPA应用,资源监听适合传统页面,拦截器则适合AJAX密集型应用。

标签: 进度加载
分享给朋友:

相关文章

vue实现圆环进度

vue实现圆环进度

Vue 实现圆环进度的方法 使用 SVG 实现圆环进度 SVG 是实现圆环进度的常用方法,通过 stroke-dasharray 和 stroke-dashoffset 属性可以轻松控制进度条的显示。…

vue实现加载动画

vue实现加载动画

Vue 实现加载动画的方法 在 Vue 中实现加载动画可以通过多种方式完成,以下是一些常见的方法: 使用 CSS 动画 通过 CSS 定义动画效果,结合 Vue 的动态类绑定实现加载动画。以下是一个…

vue懒加载实现方案

vue懒加载实现方案

vue懒加载实现方案 路由懒加载 使用动态导入语法实现路由级别的懒加载,适用于Vue Router配置。通过import()函数返回Promise,Webpack会自动分割代码块。 const ro…

vue实现页面懒加载

vue实现页面懒加载

Vue 实现页面懒加载的方法 在 Vue 中实现页面懒加载可以通过路由懒加载和组件懒加载两种方式实现,以下是具体方法: 路由懒加载 路由懒加载是通过动态导入组件的方式实现,仅在访问对应路由时才加载相…

自己实现vue懒加载

自己实现vue懒加载

Vue 懒加载的实现方式 懒加载(Lazy Loading)是一种优化技术,用于延迟加载非关键资源,提升页面初始加载速度。在 Vue 中,懒加载通常用于路由组件和图片。 路由懒加载 通过动态 imp…

vue怎么实现加载速度

vue怎么实现加载速度

优化 Vue 项目的加载速度 代码分割与懒加载 使用动态导入(import())实现路由懒加载和组件懒加载。在路由配置中,将组件改为函数形式动态加载: const Home = () => i…