vue项目中使用骨架屏的方法

yizhihongxing

为了让用户在等待页面加载的过程中获得更好的体验,我们可以在Vue项目中使用骨架屏。下面是具体的操作步骤。

步骤1. 安装依赖

我们需要安装vue-skeleton-webpack-plugin这个插件来实现骨架屏的效果。可以使用以下命令进行安装:

npm install vue-skeleton-webpack-plugin --save-dev

步骤2. 增加插件

vue.config.js文件中增加以下配置:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, './src/skeleton.js')
          }
        },
        minimize: true,
        quiet: true,
        router: {
          mode: 'history',
          routes: [
            { path: '/', skeletonId: 'home' },
            { path: '/about', skeletonId: 'about' },
          ]
        }
      })
    ]
  }
}

这个配置文件需要修改的地方比较多,主要是以下几点:

  • entry需要修改成你自己的skeleton.js文件路径。
  • router里面的routes是对应项目的路由路径和对应的id

步骤3. 创建skeleton.js文件

在项目根目录中创建skeleton.js文件,这个文件的作用是生成骨架屏需要的模板。示例代码如下:

import Vue from 'vue';
import App from './App.vue';

export default new Vue({
  render: h => h(App)
});

步骤4. 创建骨架屏模板

在你的App.vue文件中增加以下代码:

<template>
  <div>
    <!-- 正常的页面内容 -->
    <h1>{{ title }}</h1>
    <p>{{ description }}</p>

    <!-- 骨架屏模板 -->
    <div v-if="$root.$skeletonId === 'home'">
      <h3>{{ 'loading...' }}</h3>
    </div>

    <div v-if="$root.$skeletonId === 'about'">
      <h3>{{ 'loading...' }}</h3>
    </div>
  </div>
</template>

这个骨架屏模板需要配合上一步的skeleton.js文件才能正常工作。

示例1

以一个简单的列表页为例,在/list路由路径下展示一个骨架屏。

首先在vue.config.js文件中增加以下内容:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, './src/skeleton.js')
          }
        },
        minimize: true,
        quiet: true,
        router: {
          mode: 'history',
          routes: [
            { path: '/', skeletonId: 'home' },
            { path: '/list', skeletonId: 'list' },
          ]
        }
      })
    ]
  }
}

然后在List.vue组件中增加以下内容:

<template>
  <div>
    <h1>My List Page</h1>

    <div v-if="$root.$skeletonId === 'list'">
      <h3>{{ 'loading...' }}</h3>
    </div>

    <div v-else>
      <ul>
        <li v-for="item in items" :key="item.id">{{ item.title }}</li>
      </ul>
    </div>
  </div>
</template>

当用户访问/list路径时,会自动显示骨架屏模板,等待内容加载完毕后,会自动切换到正常内容。

示例2

以一个比较复杂的页面为例,展示一个包含多个部分的骨架屏。

首先在vue.config.js文件中增加以下内容:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: {
            app: path.join(__dirname, './src/skeleton.js')
          }
        },
        minimize: true,
        quiet: true,
        router: {
          mode: 'history',
          routes: [
            { path: '/', skeletonId: 'home' },
            { path: '/detail', skeletonId: 'detail' },
          ]
        }
      })
    ]
  }
}

然后在Detail.vue组件中增加以下内容:

<template>
  <div>
    <h1>{{ title }}</h1>

    <div class="detail-left">
      <div v-if="$root.$skeletonId === 'detail'">
        <div class="detail-content"></div>
      </div>
      <div v-else>
        <!-- 左侧内容 -->
      </div>
    </div>

    <div class="detail-right">
      <div v-if="$root.$skeletonId === 'detail'">
        <div class="detail-sidebar"></div>
      </div>
      <div v-else>
        <!-- 右侧内容 -->
      </div>
    </div>
  </div>
</template>

这个示例中,我们使用了两个不同的骨架屏模板:一个是左侧内容的模板,一个是右侧内容的模板。当用户访问/detail路径时,页面会自动显示骨架屏,等待页面内容加载完毕后,会自动切换到正常内容。

以上就是Vue项目中使用骨架屏的完整攻略。具体的实现方式可能因项目情况有所变化,但以上方法可以作为基本的实现方式,适用于大多数场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue项目中使用骨架屏的方法 - Python技术站

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

相关文章

  • vue实现前端展示后端实时日志带颜色示例详解

    Vue实现前端展示后端实时日志带颜色示例详解 介绍 本攻略通过Vue.js实现前端实时展示后端日志功能的实现方法,并且可以根据日志级别实时修改展示的颜色,提高可读性。 实现过程 前端代码部分 首先,在template中建立一个<div>用于展示后端传送过来的实时日志,根据控制台输出的日志可以推断,后端传来的数据都以字符串形式存在,并且每个日志信息…

    Vue 2023年5月27日
    00
  • vue 根据数组中某一项的值进行排序的方法

    Vue根据数组中某一项的值进行排序的方法: 使用JavaScript的sort方法进行排序 Vue中的数据排序可以借助JavaScript的sort方法实现。以下是按照某一项属性值进行排序的代码示例: // 数组对象 var data = [{ id: 1, name: ‘Tom’, age: 23 }, { id: 2, name: ‘Lucy’, age…

    Vue 2023年5月27日
    00
  • vue-jsonp的使用及说明

    一、vue-jsonp的说明 vue-jsonp是一个Vue.js插件,它允许我们使用JSONP方法向API服务器请求数据。JSONP是一种跨域访问数据的方法,它通过动态添加标签来实现异步加载,一般使用起来比较简单。在Vue.js中,我们可以借助vue-jsonp这个插件,使用方式也是非常简单的。 二、安装vue-jsonp 如果想使用vue-jsonp,首…

    Vue 2023年5月28日
    00
  • element ui的el-input-number修改数值失效的问题及解决

    针对“element-ui的el-input-number修改数值失效的问题及解决”这个问题,我可以给出如下的完整攻略。攻略中包含了问题出现的原因、解决方法、示例说明等内容。 问题背景 在使用 element-ui 的 el-input-number 组件时,我们可能会遇到一个问题:在表单中使用该组件后,我们无法通过键盘输入数字来修改数值,只能通过上下箭头或…

    Vue 2023年5月28日
    00
  • 详解.vue文件中style标签的几个标识符

    当我们使用 Vue 开发前端项目时,Vue 的单文件组件 .vue 文件中允许我们在 <template> 标签中定义模板、在 <script> 标签中定义 JS 代码、在 <style> 标签中定义 CSS 样式。对于 <style> 标签,Vue 允许我们使用一些特殊的标识符来扩展它们的功能和特性。 下面是…

    Vue 2023年5月28日
    00
  • Vue基本使用之对象提供的属性功能

    Vue基本使用之对象提供的属性功能 Vue.js 是一款构建数据驱动的 Web 应用程序的前端框架,提供一系列的属性、指令和组件等功能,方便开发者进行页面开发和交互操作。 其中,Vue对象提供了一些常用的属性功能,本文将介绍Vue对象提供的属性功能的使用方法。 Vue实例中提供的属性 Vue提供了许多属性来控制实例中的数据和行为,以下是常用的一些属性: $d…

    Vue 2023年5月28日
    00
  • 详解vue+axios给开发环境和生产环境配置不同的接口地址

    为了给开发环境和生产环境配置不同的接口地址,我们需要依赖于webpack。我们可以通过环境变量在编译时设置接口地址,从而在不同的环境中使用不同的接口地址。 1. 修改webpack的配置文件 在项目的根目录中找到名为vue.config.js的文件,如果不存在则通过vue-cli工具生成(vue create projectName)。在该文件中添加如下代码…

    Vue 2023年5月28日
    00
  • vue项目总结之文件夹结构配置详解

    当我们开发 Vue 项目时,良好的文件夹结构对于提高代码的可读性和可维护性至关重要。下面我将详细讲解“vue项目总结之文件夹结构配置详解”的完整攻略,帮助大家合理配置 Vue 项目的文件夹结构。 1. 将所有组件放在 components 目录下 在开发 Vue 项目时,通常会有很多的组件。为了使项目结构更为清晰,建议将所有组件放在 components 目…

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