当前位置:首页 > VUE

vue骨架屏怎么实现

2026-01-20 21:56:33VUE

Vue 骨架屏的实现方法

骨架屏(Skeleton Screen)是一种优化用户体验的加载状态展示方式,通过在内容加载前显示页面的大致结构,减少用户等待的焦虑感。以下是几种常见的实现方法:

使用第三方库(如 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'
        }
      })
    ]
  }
};

创建骨架屏入口文件 skeleton.js

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

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

编写骨架屏组件 Skeleton.vue

<template>
  <div class="skeleton">
    <!-- 骨架屏结构示例 -->
    <div class="skeleton-header"></div>
    <div class="skeleton-body">
      <div class="skeleton-line" v-for="i in 5" :key="i"></div>
    </div>
  </div>
</template>

<style>
.skeleton {
  /* 骨架屏样式 */
}
</style>

手动实现动态切换

在组件中通过 v-if 控制骨架屏与真实内容的切换:

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

<script>
export default {
  data() {
    return { loading: true };
  },
  mounted() {
    setTimeout(() => {
      this.loading = false;
    }, 2000);
  }
};
</script>

基于 CSS 动画的骨架屏

通过 CSS 实现动态效果:

.skeleton-item {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

结合路由的全局骨架屏

在根组件或布局组件中统一管理:

vue骨架屏怎么实现

<template>
  <div id="app">
    <router-view v-if="!loading" />
    <global-skeleton v-else />
  </div>
</template>

注意事项

  • 骨架屏的结构应尽量与实际内容布局一致,避免页面跳动。
  • 动画效果不宜过于复杂,以免影响性能。
  • 对于动态内容(如列表),可以使用 v-for 生成多个骨架块。
  • 在移动端注意适配不同屏幕尺寸。

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

相关文章

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…