当前位置:首页 > VUE

vue 实现loading

2026-03-27 21:32:55VUE

实现Loading效果的几种方法

在Vue中实现Loading效果可以通过多种方式,以下列举几种常见的方法:

使用CSS动画实现基础Loading

通过CSS定义旋转动画,结合Vue的条件渲染(v-if/v-show)控制显示状态:

<template>
  <div v-if="isLoading" class="loading-spinner"></div>
</template>

<style>
.loading-spinner {
  width: 40px;
  height: 40px;
  border: 4px solid #f3f3f3;
  border-top: 4px solid #3498db;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>

使用第三方库(如Element UI)

UI框架通常提供现成的Loading组件:

vue 实现loading

import { Loading } from 'element-ui'

// 开启loading
let loadingInstance = Loading.service({
  lock: true,
  text: '加载中',
  spinner: 'el-icon-loading',
  background: 'rgba(0, 0, 0, 0.7)'
})

// 关闭loading
loadingInstance.close()

全局Loading状态管理

结合Vuex实现全局Loading状态控制:

// store.js
const store = new Vuex.Store({
  state: {
    isLoading: false
  },
  mutations: {
    setLoading(state, isLoading) {
      state.isLoading = isLoading
    }
  }
})

// 组件中使用
<template>
  <div>
    <spinner v-if="$store.state.isLoading"/>
    <main-content v-else/>
  </div>
</template>

路由导航守卫控制

在页面切换时显示Loading:

vue 实现loading

router.beforeEach((to, from, next) => {
  store.commit('setLoading', true)
  next()
})

router.afterEach(() => {
  setTimeout(() => {
    store.commit('setLoading', false)
  }, 500)
})

自定义指令实现

创建v-loading指令自动处理加载状态:

Vue.directive('loading', {
  bind(el, binding) {
    const spinner = document.createElement('div')
    spinner.className = 'loading-spinner'
    el.appendChild(spinner)
    spinner.style.display = binding.value ? 'block' : 'none'
  },
  update(el, binding) {
    const spinner = el.querySelector('.loading-spinner')
    if (spinner) {
      spinner.style.display = binding.value ? 'block' : 'none'
    }
  }
})

请求拦截器集成

在axios拦截器中自动管理Loading状态:

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)
  }
)

每种方法适用于不同场景,可根据项目需求选择合适的方式或组合使用。全局状态管理适合SPA应用,而局部Loading更适合组件级加载控制。

标签: vueloading
分享给朋友:

相关文章

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue实现注销

vue实现注销

实现用户注销功能 在Vue应用中实现用户注销功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是具体实现方法: 清除用户认证信息 使用Vuex或Pinia管理用户状态时,需在注销时重置存储…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…