当前位置:首页 > 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 中使用:

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

使用示例:

vue加载动画实现

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 提供了 <transition> 和 <transition-group> 组件,结合 CSS 或 JavaScript 钩子实现动画效果。核心是…

vue动画实现原理

vue动画实现原理

Vue动画实现原理 Vue的动画系统基于CSS过渡和动画,结合Vue的响应式系统,提供声明式的方式管理元素进入/离开的动画效果。核心原理分为以下几个部分: 过渡类名自动应用 Vue在元素插入/删除…

vue实现gif动画

vue实现gif动画

在Vue中实现GIF动画 使用<img>标签直接引入GIF文件 在Vue组件中,可以直接通过<img>标签引入GIF文件。确保GIF文件已放置在项目的静态资源目录(如pub…

react如何加载网页

react如何加载网页

使用 React 加载网页的方法 通过 iframe 嵌入网页 在 React 组件中,可以通过 iframe 标签直接加载外部网页。这种方式简单直接,适合嵌入第三方页面或静态内容。 import…

vue实现图片加载

vue实现图片加载

Vue 实现图片加载的方法 在 Vue 中实现图片加载可以通过多种方式,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind 动态绑定图片路径,可以灵活地加载本地或远程图片…

vue实现border动画

vue实现border动画

实现边框动画的方法 在Vue中实现边框动画可以通过CSS动画或过渡效果结合Vue的动态样式绑定来实现。以下是几种常见的方法: 使用CSS过渡和Vue的class绑定 通过动态添加或移除CSS类来触…