当前位置:首页 > VUE

vue骨架屏技术实现

2026-02-24 15:43:10VUE

vue骨架屏技术实现

骨架屏(Skeleton Screen)是一种优化用户体验的技术,在页面加载时展示占位内容,避免白屏或闪烁问题。以下是Vue中实现骨架屏的几种方法:

使用第三方库

vue-skeleton-webpack-plugin是一个常用插件,通过Webpack在构建时生成骨架屏。安装后配置vue.config.js

vue骨架屏技术实现

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

手动编写组件

创建一个.vue文件定义骨架屏结构,使用CSS控制样式:

vue骨架屏技术实现

<template>
  <div class="skeleton">
    <div class="skeleton-header"></div>
    <div class="skeleton-body">
      <div class="skeleton-item" v-for="i in 4" :key="i"></div>
    </div>
  </div>
</template>

<style>
.skeleton {
  background: #fff;
}
.skeleton-item {
  height: 20px;
  background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 50%, #f2f2f2 75%);
  background-size: 400% 100%;
  animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
  0% { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
</style>

条件渲染控制

在主组件中通过v-if切换真实内容和骨架屏:

<template>
  <div>
    <real-content v-if="!loading" />
    <skeleton-screen v-else />
  </div>
</template>

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

SSR场景下的实现

对于Nuxt.js项目,可在布局文件中动态注入骨架屏:

// layouts/default.vue
export default {
  data() {
    return { isHydrating: true }
  },
  mounted() {
    this.isHydrating = false;
  }
}
<template>
  <div>
    <client-only>
      <real-content v-if="!isHydrating" />
      <skeleton-placeholder v-else />
    </client-only>
  </div>
</template>

关键实现要点

  • 动画效果使用CSS渐变实现加载中的闪烁效果
  • 骨架屏结构应尽量匹配真实DOM的尺寸和布局
  • 对于动态内容区域,可以使用v-for生成重复占位元素
  • 在移动端需注意适配不同屏幕尺寸

以上方法可根据项目需求选择单独使用或组合实现。第三方库适合快速集成,手动编写则更灵活可控。

标签: 骨架技术
分享给朋友:

相关文章

elementui技术

elementui技术

ElementUI 技术简介 ElementUI 是一套基于 Vue.js 的桌面端组件库,由饿了么前端团队开发并维护。它提供了丰富的 UI 组件(如表格、表单、弹窗等),遵循简洁的设计风格,适合快速…

Vue 骨架屏实现原理

Vue 骨架屏实现原理

Vue 骨架屏的实现原理 骨架屏(Skeleton Screen)是一种在页面数据加载完成前展示的占位效果,通过模拟页面结构提升用户体验。以下是Vue中实现骨架屏的核心原理和常见方法: 核心实现原理…

php弹幕实现技术

php弹幕实现技术

PHP弹幕实现技术 弹幕功能的实现通常需要结合前端和后端技术,PHP作为后端语言主要负责数据处理和存储。以下是基于PHP的弹幕实现方案: 数据库设计 创建弹幕数据表,字段通常包括: id:自增主键…

java技术如何学习

java技术如何学习

学习Java技术的路径 Java作为一门广泛应用于企业级开发、移动应用和大数据领域的编程语言,学习路径可以从基础语法到高级框架逐步深入。以下是一个系统化的学习建议: 基础语法与核心概念 掌握Java…

uniapp 技术方案

uniapp 技术方案

Uniapp 技术方案概述 Uniapp 是一款基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(包括 iOS、Android、H5、小程序等)。其核心优势在于代码复用率高、开发效率高,适…

uniapp产品技术

uniapp产品技术

uniapp 产品技术概述 uniapp 是一个基于 Vue.js 的跨平台开发框架,支持一次开发多端部署,包括 iOS、Android、H5、微信小程序、支付宝小程序等。其核心目标是提升开发效率,降…