当前位置:首页 > VUE

vue骨架屏实现

2026-02-18 06:56:44VUE

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-item {
  height: 20px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 400% 100%;
  animation: shimmer 1.5s infinite;
  margin-bottom: 10px;
  border-radius: 4px;
}

@keyframes shimmer {
  0% { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
</style>

第三方库(如 vue-skeleton-webpack-plugin)

通过 Webpack 插件自动生成骨架屏,适合复杂页面结构。需配置路由匹配规则。

安装插件:

npm install vue-skeleton-webpack-plugin

配置 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
      })
    ]
  }
};

创建 skeleton.js 入口文件:

import Vue from 'vue';
import Skeleton from './Skeleton.vue';

export default new Vue({
  components: { Skeleton },
  template: '<Skeleton />'
});

动态切换组件

结合 v-if 或异步组件,在数据加载完成后切换为实际内容。

<template>
  <div>
    <SkeletonComponent v-if="loading" />
    <RealContent v-else :data="loadedData" />
  </div>
</template>

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

使用 SVG 实现复杂骨架

通过 SVG 绘制精细的占位图形,适合不规则布局。

vue骨架屏实现

<template>
  <div class="svg-skeleton">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 150">
      <rect x="0" y="0" width="400" height="20" rx="3" fill="#f0f0f0" />
      <rect x="0" y="30" width="300" height="20" rx="3" fill="#f0f0f0" />
      <circle cx="380" cy="10" r="10" fill="#f0f0f0" />
    </svg>
  </div>
</template>

注意事项

  1. 性能优化:避免过度复杂的动画或 DOM 结构,可能影响加载性能。
  2. 适配性:确保骨架屏与实际内容布局一致,防止渲染后页面跳动。
  3. 可访问性:为骨架屏添加 aria-hidden="true" 属性,避免屏幕阅读器读取占位内容。

以上方法可根据项目需求组合使用,平衡开发效率与用户体验。

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

相关文章

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…

vue实现评分

vue实现评分

Vue 实现评分功能 使用组件库实现 安装 element-ui 或 ant-design-vue 这类 UI 库,它们已经内置了评分组件。 以 element-ui 为例: <te…

vue实现增删

vue实现增删

Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是基于 Vue 2 或 Vue 3 的实现方法: 数据定义 初始化一个数组用于存储列表数据,并在 Vue 实…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…