当前位置:首页 > VUE

vue实现页面加载进度

2026-01-23 11:42:31VUE

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

使用 NProgress 库

安装 NProgress 库:

npm install nprogress

在 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 的导航守卫

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

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实现懒加载的方法

Vue 实现懒加载的方法 路由懒加载 通过动态导入语法拆分路由组件,减少初始加载时间。适用于 Vue Router 配置: const routes = [ { path: '/hom…

vue前端实现下载进度

vue前端实现下载进度

Vue 前端实现下载进度的方法 使用 axios 的 onDownloadProgress 回调 在 axios 请求中,可以通过 onDownloadProgress 回调函数实时获取下载进度。该回…

vue加载动画实现

vue加载动画实现

Vue 加载动画实现方法 使用 CSS 动画或过渡 在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画: .loading-spinner { width: 40p…

vue 实现异步加载

vue 实现异步加载

Vue 异步加载的实现方法 动态导入组件(懒加载) 使用 import() 语法动态导入组件,Vue 会将其转换为异步加载的组件。适用于路由或组件按需加载。 const AsyncComponent…

vue实现预加载

vue实现预加载

vue实现预加载的方法 在Vue中实现预加载可以通过多种方式优化用户体验,以下是几种常见方法: 使用Webpack的魔法注释 通过import()语法结合Webpack的/* webpackPre…

vue实现加载条

vue实现加载条

Vue 实现加载条的方法 使用第三方库(如 NProgress) 安装 NProgress 库: npm install nprogress 在 Vue 项目中引入并使用: import NP…