当前位置:首页 > VUE

vue骨架屏实现

2026-03-30 07:39:14VUE

Vue骨架屏的实现方法

骨架屏(Skeleton Screen)是一种优化用户体验的技术,在数据加载前展示页面的大致结构,避免空白或加载中的突兀感。以下是几种常见的Vue骨架屏实现方式:

使用纯CSS实现骨架屏

通过CSS动画和伪元素创建简单的骨架效果,适合轻量级需求:

<template>
  <div class="skeleton-container">
    <div class="skeleton-item" v-for="i in 5" :key="i"></div>
  </div>
</template>

<style>
.skeleton-container {
  padding: 20px;
}
.skeleton-item {
  height: 60px;
  margin-bottom: 15px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 400% 100%;
  animation: shimmer 1.5s infinite;
  border-radius: 4px;
}
@keyframes shimmer {
  0% { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
</style>

使用vue-skeleton-webpack-plugin

该插件能在构建时自动生成骨架屏HTML,适合SPA应用:

安装依赖:

npm install vue-skeleton-webpack-plugin --save-dev

创建骨架屏组件:

vue骨架屏实现

<!-- Skeleton.vue -->
<template>
  <div class="skeleton-wrapper">
    <!-- 你的骨架屏结构 -->
  </div>
</template>

配置vue.config.js:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');
module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: './src/skeleton.js'
        },
        minimize: true,
        quiet: true
      })
    ]
  }
}

使用第三方库vue-content-loader

该库提供丰富的预定义骨架屏模板和自定义功能:

安装:

vue骨架屏实现

npm install vue-content-loader

基本使用:

<template>
  <content-loader>
    <!-- 自定义SVG路径定义骨架结构 -->
    <rect x="0" y="0" rx="3" ry="3" width="250" height="10" />
    <rect x="0" y="20" rx="3" ry="3" width="220" height="10" />
  </content-loader>
</template>

<script>
import { ContentLoader } from 'vue-content-loader'
export default {
  components: { ContentLoader }
}
</script>

动态切换真实内容与骨架屏

在实际组件中通过v-if控制显示逻辑:

<template>
  <div>
    <div v-if="loading">
      <skeleton-component />
    </div>
    <div v-else>
      <!-- 真实内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loading: true
    }
  },
  async created() {
    await this.fetchData()
    this.loading = false
  }
}
</script>

响应式骨架屏设计

针对不同屏幕尺寸调整骨架屏布局:

.skeleton-item {
  width: 100%;
}
@media (min-width: 768px) {
  .skeleton-item {
    width: 50%;
    float: left;
  }
}
@media (min-width: 1024px) {
  .skeleton-item {
    width: 33.33%;
  }
}

最佳实践建议

  • 保持骨架屏结构与真实UI布局一致
  • 动画效果应柔和,避免闪烁过快
  • 针对不同路由设计不同的骨架屏
  • 在SSR应用中考虑服务端渲染骨架屏
  • 测试各种网络条件下的显示效果

实现骨架屏时,应根据项目复杂度选择合适方案,简单项目可使用CSS方案,复杂SPA建议采用插件或专用库实现。

标签: 骨架vue
分享给朋友:

相关文章

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout() {…

vue实现列表

vue实现列表

Vue 实现列表的方法 在 Vue 中实现列表渲染通常使用 v-for 指令,可以动态生成多个元素。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 遍历数组,生成列表项。v-for 需要…

vue实现打印

vue实现打印

使用Vue实现打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用window.print() 这种方法适用于打印整个页面或特定区域的内容。 // 在Vu…

vue 实现文字滚动

vue 实现文字滚动

Vue 实现文字滚动效果 使用CSS动画实现 通过CSS的@keyframes和transform属性实现文字滚动效果: <template> <div class="scro…

vue实现左右菜单联动实现

vue实现左右菜单联动实现

Vue 实现左右菜单联动 使用事件总线通信 在 Vue 中可以通过事件总线实现左右菜单的通信。创建一个中央事件总线实例,让左右菜单通过事件监听和触发实现联动。 // eventBus.js impo…

vue实现tab功能

vue实现tab功能

Vue 实现 Tab 功能的方法 使用动态组件和 v-if 指令 通过 v-if 或 v-show 控制不同 Tab 内容的显示与隐藏。这种方法适合简单的 Tab 切换需求。 <tem…