当前位置:首页 > 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 单位适配不同屏幕

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

vue实现页面骨框架

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

相关文章

vue实现转页面

vue实现转页面

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式完成,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 安装html2canvas库 npm install html2canvas --save 在Vue组件中引入并使用 import html2canvas f…

h5实现页面跳转

h5实现页面跳转

使用 <a> 标签实现跳转 通过 HTML5 的 <a> 标签实现页面跳转是最基础的方法,适用于静态页面或简单的导航需求。示例代码如下: <a href="target…

h5实现页面跳转页面

h5实现页面跳转页面

H5 实现页面跳转的方法 在 H5(HTML5)中,实现页面跳转可以通过多种方式完成,以下是常见的几种方法: 使用 <a> 标签 通过 HTML 的 <a> 标签实现页面跳…

h5实现页面跳转页面跳转页面

h5实现页面跳转页面跳转页面

H5 实现页面跳转的方法 使用 <a> 标签实现跳转 通过超链接标签 <a> 的 href 属性指定目标页面路径,用户点击后跳转。 <a href="target.…

jquery页面

jquery页面

jQuery 页面操作指南 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互的操作。以下是 jQuery 在页面中的常见使用方法…