当前位置:首页 > VUE

vue实现页面骨框架

2026-02-23 17:54:49VUE

Vue 实现页面骨架屏的方法

骨架屏(Skeleton Screen)是一种在页面数据加载前展示的占位图,能够提升用户体验。以下是几种实现方式:

使用 CSS 实现基础骨架屏

通过纯 CSS 可以快速创建简单的骨架效果,适合静态内容的占位:

<template>
  <div class="skeleton-container">
    <div class="skeleton-item" v-for="i in 5" :key="i"></div>
  </div>
</template>

<style>
.skeleton-container {
  padding: 20px;
}
.skeleton-item {
  height: 40px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 400% 100%;
  margin-bottom: 15px;
  animation: shimmer 1.5s infinite;
  border-radius: 4px;
}
@keyframes shimmer {
  0% { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
</style>

使用 vue-skeleton-webpack-plugin

该插件能自动生成骨架屏并与路由结合:

  1. 安装插件:

    npm install vue-skeleton-webpack-plugin --save-dev
  2. 创建骨架屏组件 Skeleton.vue

    <template>
    <div class="skeleton-wrapper">
     <!-- 自定义骨架结构 -->
    </div>
    </template>
  3. 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
       })
     ]
    }
    }

结合路由实现按需加载

通过路由元信息控制骨架屏显示:

const routes = [
  {
    path: '/detail',
    component: () => import('@/views/Detail.vue'),
    meta: { skeleton: true }
  }
]

在全局路由守卫中处理:

router.beforeEach((to, from, next) => {
  if (to.meta.skeleton) {
    store.commit('setLoading', true)
  }
  next()
})

使用第三方库 vue-content-loader

该库提供更丰富的预制形状:

  1. 安装:

    npm install vue-content-loader
  2. 使用示例:

    
    <template>
    <content-loader>
     <rect x="0" y="0" rx="3" ry="3" width="250" height="10" />
     <rect x="20" y="20" rx="3" ry="3" width="220" height="10" />
     <circle cx="25" cy="65" r="20" />
     <rect x="60" y="50" rx="3" ry="3" width="170" height="10" />
    </content-loader>
    </template>
import { ContentLoader } from 'vue-content-loader' export default { components: { ContentLoader } } ```

动态数据适配的骨架屏

对于动态内容,可以计算元素尺寸生成匹配的骨架:

export default {
  data() {
    return {
      skeletonRects: []
    }
  },
  mounted() {
    this.$nextTick(() => {
      const elements = document.querySelectorAll('.dynamic-item')
      this.skeletonRects = Array.from(elements).map(el => {
        const rect = el.getBoundingClientRect()
        return {
          width: rect.width,
          height: rect.height,
          top: rect.top,
          left: rect.left
        }
      })
    })
  }
}

性能优化建议

  • 使用 v-cloak 防止闪现

    [v-cloak] { display: none; }
  • 骨架屏元素数量应与实际内容保持一致

  • 适当添加动画效果但避免过度复杂

  • 移动端考虑使用 rem 单位适配不同屏幕

    vue实现页面骨框架

以上方法可根据项目需求组合使用,CSS 方案适合简单场景,插件方案适合复杂应用,第三方库则能快速实现精美效果。

标签: 框架页面
分享给朋友:

相关文章

css如何制作页面模糊

css如何制作页面模糊

使用 backdrop-filter 属性 通过 backdrop-filter 属性可以直接为元素背后的区域添加模糊效果。该属性需要浏览器支持(如 Chrome、Edge、Safari)。示例代码:…

vue单页面实现登录

vue单页面实现登录

实现登录功能的基本步骤 在Vue单页面应用(SPA)中实现登录功能,通常需要结合前端和后端交互。以下是关键步骤和代码示例: 创建登录组件 开发一个独立的登录组件,包含表单元素如用户名和密码输入框,以…

实现vue框架

实现vue框架

Vue 框架的实现步骤 安装 Vue.js 最新版本,推荐通过 npm 或 yarn 进行安装。确保 Node.js 环境已配置完成。 npm install vue 创建 Vue 实例,通过 ne…

h5页面实现扫一扫

h5页面实现扫一扫

调用设备摄像头实现扫描功能 在H5页面中实现扫一扫功能通常需要调用设备的摄像头,并通过JavaScript解析摄像头捕获的图像。以下是几种常见的实现方法: 使用HTML5的getUserMedia…

vue实现的页面

vue实现的页面

以下是基于 Vue.js 实现页面的核心方法和关键步骤,结合现代开发实践整理而成: 环境配置与项目初始化 使用 Vue CLI 或 Vite 创建项目,推荐选择 Vue 3 组合式 API 风格:…

h5页面如何实现

h5页面如何实现

实现H5页面的方法 H5页面是基于HTML5技术的网页,通常用于移动端和响应式设计。以下是实现H5页面的关键步骤和技术要点。 基础结构 使用HTML5的DOCTYPE声明作为页面的起始。HTML5简…