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

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提供了丰富的预置骨架屏模板和自定义功能。

安装:

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 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue…

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addToC…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取…

vue调用接口实现退出

vue调用接口实现退出

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

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(…