当前位置:首页 > VUE

vue实现加载动画

2026-03-29 23:44:13VUE

Vue 实现加载动画的方法

使用 CSS 动画

通过 Vue 的 v-ifv-show 控制动画显示,结合 CSS 实现旋转或进度条效果:

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

<style>
.loading {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.5);
  display: flex;
  justify-content: center;
  align-items: center;
}
.spinner {
  width: 50px;
  height: 50px;
  border: 5px solid #f3f3f3;
  border-top: 5px solid #3498db;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}
@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>

使用第三方库(如 Vuetify)

Vuetify 提供预置的加载组件:

<template>
  <v-progress-circular
    indeterminate
    color="primary"
    v-if="loading"
  ></v-progress-circular>
</template>

<script>
import { VProgressCircular } from 'vuetify/lib'
export default {
  components: { VProgressCircular },
  data: () => ({ loading: true })
}
</script>

动态路由加载动画

在 Vue Router 的全局守卫中添加加载状态:

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

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

骨架屏技术

数据加载前显示占位图形:

<template>
  <div v-if="loading" class="skeleton">
    <div class="skeleton-line"></div>
    <div class="skeleton-line"></div>
  </div>
  <div v-else>实际内容</div>
</template>

<style>
.skeleton-line {
  height: 20px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
  to { background-position: -200% 0; }
}
</style>

按需加载动画

通过动态导入显示加载状态:

vue实现加载动画

const AsyncComponent = () => ({
  component: import('./Component.vue'),
  loading: LoadingComponent,
  error: ErrorComponent,
  delay: 200,
  timeout: 3000
})

注意事项

  • 动画持续时间建议控制在 300-1000ms 之间
  • 移动端需考虑性能影响,避免复杂动画
  • 提供无障碍支持,添加 ARIA 属性
  • 全局加载状态建议使用 Vuex 管理
  • 网络请求可结合 axios 拦截器控制显示

标签: 加载动画
分享给朋友:

相关文章

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

vue实现预加载

vue实现预加载

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

vue实现路由动画

vue实现路由动画

路由动画的实现方法 在Vue中实现路由动画通常结合<transition>组件和Vue Router的导航守卫。以下是几种常见实现方式: 基础过渡动画 <template>…

vue动态加载实现

vue动态加载实现

Vue动态加载实现方法 动态加载在Vue中通常指按需加载组件或资源,以下是几种常见实现方式: 使用异步组件 通过defineAsyncComponent或动态import()语法实现组件按需加载:…

vue 实现模块加载

vue 实现模块加载

Vue 实现模块加载的方法 使用动态导入(Dynamic Import) 动态导入是 ECMAScript 模块系统的特性,Vue 项目可以通过 import() 语法实现按需加载模块。这种方式在构建…

vue实现消息动画

vue实现消息动画

Vue 实现消息动画的方法 使用 Vue Transition 组件 Vue 内置的 <transition> 组件可以方便地实现消息动画效果。通过添加 CSS 过渡或动画类名,可以实现平…