当前位置:首页 > VUE

vue骨架屏实现

2026-01-17 14:23:04VUE

vue骨架屏实现方法

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

使用CSS实现基础骨架屏

通过纯CSS编写骨架屏样式,适用于简单场景。创建一个与真实内容结构相似的DOM元素,并添加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, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
  background-size: 400% 100%;
  animation: skeleton-loading 1.4s ease infinite;
  margin-bottom: 10px;
}

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

使用vue-skeleton-webpack-plugin

该插件能在构建时生成骨架屏组件,并自动注入到页面中。

安装插件:

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

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

使用第三方库vue-content-loader

vue-content-loader提供了丰富的预置骨架屏模板和自定义功能。

安装:

vue骨架屏实现

npm install vue-content-loader

使用示例:

<template>
  <content-loader>
    <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" />
    <rect x="0" y="40" rx="3" ry="3" width="180" height="10" />
  </content-loader>
</template>

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

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

在数据加载完成后,切换显示真实内容:

<template>
  <div>
    <div v-if="loading">
      <!-- 骨架屏内容 -->
    </div>
    <div v-else>
      <!-- 真实内容 -->
    </div>
  </div>
</template>

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

服务端渲染(SSR)中的骨架屏

对于Nuxt.js等SSR框架,可在asyncData或fetch方法中控制骨架屏显示:

export default {
  async asyncData({ params }) {
    try {
      const data = await getData(params.id);
      return { data, loading: false };
    } catch (e) {
      return { loading: false, error: e };
    }
  }
}

选择合适的方法取决于项目需求,简单项目可使用CSS方案,复杂项目推荐使用vue-content-loader或webpack插件方案。

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

相关文章

vue 页签实现

vue 页签实现

Vue 页签实现方法 在 Vue 中实现页签功能通常涉及动态组件、路由或状态管理。以下是几种常见的实现方式: 使用动态组件 通过 Vue 的 <component> 动态组件结合 v-…

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mi…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.def…