当前位置:首页 > 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 插件自动生成骨架屏,适合复杂页面结构。需配置路由匹配规则。

vue骨架屏实现

安装插件:

npm install vue-skeleton-webpack-plugin

配置 vue.config.js

vue骨架屏实现

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 绘制精细的占位图形,适合不规则布局。

<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 伪函数实现方法 伪函数(Mock Function)在 Vue 中常用于测试或模拟某些逻辑,以下是几种常见的实现方式: 使用 Jest 的 jest.fn() 在单元测试中,可以通过 Je…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signature…