vue加载动画实现
Vue 加载动画的实现方法
在 Vue 中实现加载动画可以通过多种方式,以下是几种常见的实现方法:
使用 CSS 动画
通过 Vue 的过渡系统结合 CSS 动画可以实现简单的加载效果。定义一个加载动画组件,利用 CSS 的 @keyframes 或 transition 属性实现动画效果。
<template>
<div class="loader"></div>
</template>
<style>
.loader {
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>
使用第三方库
许多第三方库如 vue-spinner、element-ui 提供了现成的加载动画组件,可以快速集成到项目中。
npm install vue-spinner
<template>
<vue-spinner type="wave" color="#3498db" size="50px"></vue-spinner>
</template>
<script>
import { VueSpinner } from 'vue-spinner';
export default {
components: {
VueSpinner
}
}
</script>
结合 Vue 过渡效果
利用 Vue 的 <transition> 或 <transition-group> 组件,可以为元素的显示和隐藏添加动画效果。
<template>
<transition name="fade">
<div v-if="isLoading" class="loading-overlay">
<div class="loading-spinner"></div>
</div>
</transition>
</template>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
.loading-spinner {
/* 添加旋转动画样式 */
}
</style>
基于状态管理的全局加载动画
在大型应用中,可以通过 Vuex 或 Pinia 管理加载状态,全局控制加载动画的显示与隐藏。
// store.js
state: {
isLoading: false
},
mutations: {
setLoading(state, isLoading) {
state.isLoading = isLoading;
}
}
<template>
<div v-if="$store.state.isLoading" class="global-loader">
<!-- 加载动画内容 -->
</div>
</template>
骨架屏加载动画
骨架屏是一种流行的加载方式,在内容加载前显示占位图形,提升用户体验。

<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>
选择适合的方法
根据项目需求和复杂度,可以选择不同的实现方式。CSS 动画适合简单场景,第三方库提供快速解决方案,状态管理适合全局控制,骨架屏则能显著提升用户体验。






