当前位置:首页 > VUE

vue加载动画实现

2026-01-14 02:03:36VUE

Vue 加载动画实现方法

使用 CSS 动画或过渡

在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画:

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

在 Vue 模板中使用:

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

使用第三方动画库

可以集成如 Animate.css 这样的 CSS 动画库:

npm install animate.css

在 Vue 中使用:

import 'animate.css'
<template>
  <div 
    v-if="isLoading"
    class="animate__animated animate__fadeIn animate__infinite"
  >
    Loading...
  </div>
</template>

基于 Vue 的过渡系统

利用 Vue 内置的 <transition> 组件实现加载过渡效果:

<template>
  <transition name="fade">
    <div v-if="isLoading" class="loading-overlay">
      <!-- 加载内容 -->
    </div>
  </transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

使用专用加载组件库

集成如 vue-loading-overlay 这样的专用库:

npm install vue-loading-overlay

使用示例:

import Loading from 'vue-loading-overlay'
import 'vue-loading-overlay/dist/vue-loading.css'

export default {
  components: {
    Loading
  },
  data() {
    return {
      isLoading: false
    }
  }
}
<template>
  <loading :active.sync="isLoading" :can-cancel="false"/>
</template>

骨架屏加载效果

实现内容加载前的占位效果:

<template>
  <div v-if="isLoading" 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 {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
</style>

路由切换加载动画

在 Vue Router 中实现页面切换时的加载动画:

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

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

在 App.vue 中:

<template>
  <div id="app">
    <transition name="page" mode="out-in">
      <router-view/>
    </transition>
    <loading :active="$store.state.isLoading"/>
  </div>
</template>

<style>
.page-enter-active, .page-leave-active {
  transition: opacity 0.3s, transform 0.3s;
}
.page-enter, .page-leave-to {
  opacity: 0;
  transform: translateY(10px);
}
</style>

每种方法适用于不同场景,可以根据项目需求选择合适的实现方式。CSS 动画适合简单需求,专用组件库提供更多功能和自定义选项,骨架屏能提升用户体验。

vue加载动画实现

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

相关文章

vue实现购物车动画

vue实现购物车动画

实现购物车动画的步骤 使用 Vue 的过渡系统 Vue 提供了 <transition> 和 <transition-group> 组件,可以方便地实现动画效果。购物车动画通常…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…

vue点击实现动画

vue点击实现动画

Vue 中实现点击动画的方法 使用 Vue 过渡(Transition)组件 Vue 提供了内置的 <transition> 组件,可以轻松实现元素进入/离开的动画效果。结合 v-if 或…

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要通过 transition、transform 和 animation 属性实现。以下是几种常见的实现方法。 使用 transit…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要包括内置组件和第三方库。 使用 <transition> 和 <transition-group> Vue 内置…