Vue页面骨架屏的实现方法

yizhihongxing

当用户访问页面时,如果页面加载速度很慢,很容易造成用户的不耐烦和流失,导致用户体验降低。为了避免这种情况的发生,可以使用 skeleton screen(骨架屏)技术,即在页面加载过程中,先呈现出一个简单的页面骨架,等到页面加载完成后,再把数据填充到页面中,使得用户不会感到过长的等待时间。

下面是实现Vue页面骨架屏的具体步骤:

1. 安装 vue-content-loader

骨架屏是一种基于 SVG 的图形动画,只需要安装 vue-content-loader 就可以在 Vue 中使用。

npm install --save vue-content-loader

2. 编写骨架屏组件

在 Vue 组件中,设置一个 data 属性,用来判断数据是否加载完成,然后分别编写两段 HTML : 骨架屏部分和数据部分,通过v-if来判断是否需要显示骨架屏。

<template>
  <div class="container">
    <!-- 骨架屏部分 -->
    <vue-content-loader v-if="!isLoaded" :speed="2" :width="300" :height="20">
      <rect x="10" y="8" rx="5" ry="5" width="85" height="10" />
      <rect x="100" y="8" rx="5" ry="5" width="85" height="10" />
      <rect x="190" y="8" rx="5" ry="5" width="85" height="10" />
    </vue-content-loader>
    <!-- 数据部分 -->
    <ul v-else>
      <li v-for="(item, index) in list" :key="index">{{ item }}</li>
    </ul>
  </div>
</template>

<script>
import VueContentLoader from 'vue-content-loader'

export default {
  data () {
    return {
      list: [],
      isLoaded: false // 判断数据是否加载完成
    }
  },
  mounted () {
    // 模拟异步请求数据
    setTimeout(() => {
      this.list = ['aaa', 'bbb', 'ccc']
      this.isLoaded = true // 数据加载完成
    }, 2000)
  },
  components: {
    VueContentLoader
  }
}
</script>

3. 针对不同场景进行优化

实际项目中,可能遇到图片、按钮等复杂的组件,因此需要使用不同的骨架屏组件来设置相应的骨架屏,以达到更优的骨架屏效果。

3.1 骨架块组件

<template>
  <vue-content-loader :width="150" :height="25">
    <!-- 标题 -->
    <rect x="0" y="0" rx="5" ry="5" width="150" height="15" />
    <!-- 内容 -->
    <rect x="0" y="18" rx="5" ry="5" width="150" height="7" />
  </vue-content-loader>
</template>

3.2 骨架条组件

<template>
  <vue-content-loader :speed="2" :width="300" :height="100">
    <!-- 标题 -->
    <rect x="0" y="0" rx="5" ry="5" width="300" height="17" />
    <!-- 状态 -->
    <rect x="0" y="30" rx="5" ry="5" width="80" height="10" />
    <!-- 内容 -->
    <rect x="0" y="50" rx="5" ry="5" width="300" height="35" />
  </vue-content-loader>
</template>

以上就是Vue页面骨架屏的实现方法,根据具体的需求,可以对骨架屏进行不同的调整,从而达到更佳的用户体验效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue页面骨架屏的实现方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue计算属性无法监听到数组内部变化的解决方案

    当 Vue 响应式系统检测到 data 对象中某个属性发生变化时,Vue 会自动更新渲染视图。然而,在某些情况下,Vue 无法监控到数据的变化,例如对数组的操作。为解决这个问题,Vue 提供了计算属性,可以监控数据的变化并且自动更新视图。 但是,当我们对数组进行变异操作时(例如使用 push(),pop(),shift(),unshift() 等方法),Vu…

    Vue 2023年5月29日
    00
  • vue – props 声明数组和对象操作

    当我们通过props传递数组或对象数据时,需要注意以下几点: 父组件向子组件传递数组或对象数据时,需要使用v-bind绑定数据,子组件中需要使用props接收数据。 子组件可以直接使用props接收到的数组或对象数据,也可以对其进行修改操作。但需要注意:Vue不建议直接修改props中的数据,否则可能会导致数据流不清晰,难以维护。 如果子组件需要修改prop…

    Vue 2023年5月28日
    00
  • bootstrap datetimepicker控件位置异常的解决方法

    下面是关于“bootstrap datetimepicker控件位置异常的解决方法”的完整攻略。 前言 datetimepicker是基于bootstrap库的一个控件,用于方便地选择日期和时间。在使用过程中,我们经常会遇到控件位置异常的情况,这时候该怎么办呢?下面我们就来一步一步解决这个问题。 步骤 第一步:检查样式表 datetimepicker的样式表…

    Vue 2023年5月28日
    00
  • Vue响应式系统的原理详解

    Vue响应式系统的原理详解 什么是响应式系统? 响应式系统是现代JavaScript框架中最重要的概念之一。它可以让你的组件根据数据的变化自动重新渲染。Vue是一个基于响应式系统构建的现代JavaScript框架。响应式系统在Vue中可以实现双向绑定,使得一个组件中的数据变化可以影响到其它组件。 响应式系统基础 Vue中的响应式系统是建立在ES6的Proxy…

    Vue 2023年5月27日
    00
  • 解决vue路由发生了跳转但是界面没有任何反应问题

    在vue中,我们使用路由(Router)来实现页面的跳转。但是有时候我们会遇到这样一种问题:点击页面中的导航链接,路由发生了跳转,但是网页的界面没有任何变化。这是什么原因呢? 这通常是因为我们的路由跳转没有更新对应的视图(View)导致的。那么如何解决这个问题呢?下面,我将为大家介绍两种解决方案。 方案一:使用标签 我们可以在App.vue文件中使用vue提…

    Vue 2023年5月27日
    00
  • 浅谈在Vue.js中如何实现时间转换指令

    怎样在Vue.js中定义自定义指令Vue.js框架中提供了一个全局指令注册方法Vue.directive,可以方便地添加自定义指令。指令本质上就是一个指令函数,有五个钩子函数,分别对应着不同的阶段。 如何实现时间转换指令在Vue.js中,可以采用过滤器方式来实现时间转换,也可以采用指令方式来实现。在本文中,我们主要介绍如何使用指令来实现时间转换功能。时间转换…

    Vue 2023年5月28日
    00
  • vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)

    为了实现文件上传,我们需要使用Vue.js和Vant UI框架的一些组件和方法。具体步骤如下: 步骤一:安装所需依赖 首先,在项目目录下安装相应的依赖库。 npm install vant -S # 安装 vant ui 库 npm install vue-awesome-uploader -S # 安装 vue-awesome-uploader 库 步骤二…

    Vue 2023年5月28日
    00
  • JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析

    JS中有三个方法可以用于限制对象的属性的增删改操作,分别是preventExtensions()、seal()和freeze()。这些方法可以让我们对对象进行保护,以确保其属性无法被意外更改。 Object.preventExtensions() preventExtensions()方法可以阻止对象的属性被添加。如果对象已经被预防扩展,则无法向该对象添加任…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部