当前位置:首页 > VUE

vue实现骨架屏

2026-02-19 20:47:26VUE

Vue 实现骨架屏的方法

骨架屏(Skeleton Screen)是一种提升用户体验的加载效果,通过在内容加载前展示页面的大致结构,减少用户等待的焦虑感。以下是几种在 Vue 中实现骨架屏的常用方法。

使用纯 CSS 实现

通过 CSS 直接编写骨架屏的样式,适用于简单的布局。优点是轻量,无需额外依赖。

<template>
  <div class="skeleton-container">
    <div class="skeleton-header"></div>
    <div class="skeleton-content"></div>
  </div>
</template>

<style>
.skeleton-container {
  width: 100%;
}
.skeleton-header {
  height: 60px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}
.skeleton-content {
  height: 200px;
  margin-top: 20px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
  from { background-position: 200% 0; }
  to { background-position: -200% 0; }
}
</style>

使用第三方库 vue-skeleton-webpack-plugin

对于复杂的项目,可以使用 vue-skeleton-webpack-plugin 自动生成骨架屏。该插件通过 Webpack 在构建时生成骨架屏页面。

安装插件:

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

结合 v-if 动态切换

通过 v-ifv-show 控制骨架屏和实际内容的显示切换。

<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>

使用组件库内置骨架屏

部分 UI 组件库(如 Element UI、Vant)提供了内置的骨架屏组件,可直接调用。

以 Vant 为例:

<template>
  <van-skeleton title :row="3" :loading="loading">
    <div>实际内容</div>
  </van-skeleton>
</template>

<script>
import { Skeleton } from 'vant';

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

通过路由切换全局骨架屏

在路由守卫中全局控制骨架屏的显示,适用于多页面场景。

// router.js
import Vue from 'vue';
import Router from 'vue-router';
import App from './App.vue';

Vue.use(Router);

const router = new Router({
  routes: [...]
});

router.beforeEach((to, from, next) => {
  Vue.prototype.$loading = true;
  next();
});

router.afterEach(() => {
  setTimeout(() => {
    Vue.prototype.$loading = false;
  }, 1000);
});

export default router;

App.vue 中监听全局状态:

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

注意事项

  • 性能优化:骨架屏的动画应尽量简单,避免过度消耗资源。
  • 适配性:确保骨架屏的布局与实际内容一致,避免页面跳动。
  • 加载时机:合理设置骨架屏的显示时间,避免过长或过短。

以上方法可根据项目需求灵活选择或组合使用。

vue实现骨架屏

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

相关文章

vue实现单页面

vue实现单页面

Vue 实现单页面应用(SPA) Vue.js 是一个渐进式框架,非常适合构建单页面应用(SPA)。SPA 的核心特点是整个应用只有一个 HTML 页面,通过动态加载内容实现页面切换,无需重新加载整个…

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker的…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 con…

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以…

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配。…