基于 vue-skeleton-webpack-plugin 的骨架屏实战

让我来详细讲解“基于 vue-skeleton-webpack-plugin 的骨架屏实战”的完整攻略。

简介

随着客户端应用的普及以及前端性能要求的不断提高,页面骨架屏方案得到了广泛的应用。Vue.js 作为目前最受欢迎的前端框架之一,也有很多骨架屏方案可供选择。在这里,我们以 vue-skeleton-webpack-plugin 为例,介绍使用骨架屏实现页面渲染优化的方法。

基本使用方法

  1. 安装插件

bash
npm i vue-skeleton-webpack-plugin --save-dev

  1. 修改 webpack 配置:

```js
const VueSkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
// ...
plugins: [
new VueSkeletonWebpackPlugin({
webpackConfig: {
entry: {...}, // 指定骨架屏组件的入口文件
},
minimize: true, // 是否压缩 HTML 模板,默认为 true
quiet: true, // 是否开启日志输出,默认为 true
}),
],
// ...
}
```

  1. 编写骨架屏组件

在指定的骨架屏组件入口文件中,按照 vue 组件的方式编写骨架屏代码。例如:

```html

```

  1. 在需要使用骨架屏的页面中,通过 Skeleton 组件引入骨架屏组件:

```html

```

通过 Skeleton 包裹实际渲染组件,即可在组件渲染完成前显示出骨架屏,从而提升页面渲染体验。注意,在以上示例代码中我们需要将 Skeleton 和实际组件 MyComponent 都注册为 Vue 组件。

示例一

下面我们通过一个开源项目VueCnodeJS来演示如何使用vue-skeleton-webpack-plugin插件实现骨架屏效果。在这个项目中,我们将其首页(即话题列表页)作为实际页面,在这个页面中应用骨架屏。

安装 vue-skeleton-webpack-plugin

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

修改 webpack 配置

由于 VueCnodeJS 项目使用的是 vue-cli搭建的,因此我们可以通过在 package.json 中配置 vue 的 webpack 配置来修改 webpack 配置。具体操作如下:

  1. package.jsonvue 字段中添加 chainWebpack 函数,并在其中使用 vue-skeleton-webpack-plugin

```json
{
"vue": {
"chainWebpack": config => {
const VueSkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

     // 添加骨架屏 webpack 插件
     config.plugin('vue-skeleton-webpack-plugin').use(VueSkeletonWebpackPlugin, [
       {
         webpackConfig: {
           entry: require('path').resolve(__dirname, './src/skeleton/index.js'),
         },
         minimize: true,
         quiet: true,
       },
     ]);
   }
 }

}
```

webpackConfig.entry 表示使用骨架屏的组件所在的 JS 文件的路径。

  1. package.jsonscripts 字段中添加一个脚本命令,用于运行 VueCnodeJS 项目。

json
{
"scripts": {
"start": "vue-cli-service serve --open"
}
}

编写骨架屏组件

按照我们在“基本使用方法”章节中介绍的规范编写骨架屏组件,这里就不再赘述。

示例代码如下:

<template>
  <div class="skeleton">
    <div class="header">
      <div class="title"></div>
      <div class="switch">
        <div class="tab"></div>
        <div class="tab"></div>
      </div>
    </div>
    <div class="list">
      <div class="item" v-for="index in 10" :key="index">
        <div class="title"></div>
        <div class="info"></div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
};
</script>

<style scoped>
/* 定义骨架屏样式 */
.header,
.list {
  background-color: #f0f0f0;
}

.title {
  height: 20px;
  margin-bottom: 20px;
  background-color: #f0f0f0;
}

.switch {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.tab {
  height: 36px;
  width: 48px;
  background-color: #f0f0f0;
}

.item {
  display: flex;
  align-items: center;
  margin-bottom: 10px;
  padding: 10px 0;
}

.info {
  height: 18px;
  width: 80%;
  margin-left: 10px;
  background-color: #f0f0f0;
}
</style>

引入骨架屏

我们在项目的 src/views/Home.vue 文件中引入骨架屏。具体操作如下:

  1. src/views/Home.vue 文件的顶部引入 Skeleton 组件和骨架屏组件。

```html

```

  1. src 目录下创建 skeleton 目录,并在其中创建 index.js 文件,作为骨架屏组件的入口文件。

```js
import Vue from 'vue';
import SkeletonComponent from './Skeleton.vue';

export default new Vue({
components: {
Skeleton: SkeletonComponent,
},
template: '',
});
```

运行项目

通过运行以下命令来启动 VueCnodeJS 项目:

npm run start

http://localhost:8080 查看效果。

示例二

下面我们再介绍一个场景,即当页面内有多个骨架屏时,如何处理骨架屏的数据传递问题。

在这个场景下,我们使用一个简单的例子来演示。假设我们有一个车辆列表页面,包含多个车辆信息项,每个车辆信息项的数据都需要异步加载。这时,我们可以使用骨架屏来优化页面的渲染效果。

实现思路

要实现这个效果,我们需要:

  1. 编写骨架屏组件;
  2. 在骨架屏组件内部,使用 props 传递异步加载数据的状态;
  3. 在组件渲染的时候,通过 v-ifv-show 控制骨架屏的显示和隐藏。

编写代码

编写父组件

假设我们在父组件中动态渲染了多个子组件,并异步加载了每个子组件的数据。我们需要在父组件中为每个子组件准备一个对应的骨架屏,以实现优化页面渲染效果的效果。

<template>
  <div>
    <CarItem v-for="(car, index) in carList" :key="index" :car="car" />
  </div>
</template>

<script>
import CarItem from '@/components/CarItem.vue';

export default {
  components: {
    CarItem,
  },
  data() {
    return {
      carList: [],
    };
  },
  created() {
    // 异步加载数据
  },
};
</script>

编写子组件

我们在子组件中使用 props 接收父组件传来的异步加载数据的状态,并使用 v-ifv-show 控制骨架屏和子组件的显示和隐藏。

<template>
  <div>
    <Skeleton v-if="!loaded" />
    <div v-show="loaded">
      <div class="car-name">{{ car.name }}</div>
      <div class="car-info">{{ car.info }}</div>
    </div>
  </div>
</template>

<script>
import Skeleton from './Skeleton.vue';

export default {
  props: {
    car: Object,
  },
  data() {
    return {
      loaded: false,
    };
  },
  mounted() {
    // 异步加载数据
  },
  methods: {
    // 异步加载数据
  },
  components: {
    Skeleton,
  },
};
</script>

编写骨架屏组件

骨架屏组件的编写方法与前面介绍的相似,这里就不再赘述了。

小结

通过前面的操作,我们将每个子组件和骨架屏进行关联,从而在同时优化页面渲染效果的情况下,实现异步加载数据的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于 vue-skeleton-webpack-plugin 的骨架屏实战 - Python技术站

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

相关文章

  • vue + axios get下载文件功能

    简介 Vue.js是一种渐进式JavaScript框架,它可以帮助开发人员更轻松地构建交互式的用户界面。Axios则是一个用于浏览器和Node.js的基于Promise的HTTP客户端,用于处理AJAX请求和RESTful API。本文将介绍如何结合Vue和Axios实现下载文件的功能。 实现过程 首先需要在Vue项目中安装Axios。可以使用npm命令行工…

    Vue 2023年5月28日
    00
  • vue项目环境搭建 启动 移植操作示例及目录结构分析

    下面就来详细讲解一下“vue项目环境搭建 启动 移植操作示例及目录结构分析”的攻略。 1. 环境搭建 在开始开发 Vue 项目之前,需要先搭建好相应的环境,具体步骤如下: 1.1 安装 Node.js 在 Node.js 官网下载最新版的 Node.js 后进行安装,这里不做过多介绍。 1.2 安装 Vue CLI Vue CLI 是 Vue 的脚手架工具,…

    Vue 2023年5月28日
    00
  • vue 文件目录结构详解

    下面我为您详细讲解一下Vue文件目录结构的完整攻略。 目录结构说明 在Vue项目创建完成后,我们会看到类似于下面的目录结构: ├── node_modules // 存放整个项目的依赖库 ├── public // 静态资源文件夹,存放系统所需的静态资源。例如图像文件等 │ ├── index.html // 入口页面 ├── src // 真正的代码仓库,…

    Vue 2023年5月28日
    00
  • element日历calendar组件上月、今天、下月、日历块点击事件及模板源码

    下面是详细讲解 “element 日历 calendar 组件上月、今天、下月、日历块点击事件及模板源码”的完整攻略。 1. 功能说明 element 日历 calendar 组件是一款强大的日期选择组件,常用于项目中的日期选择、预约等场景。在本篇攻略中,将详细讲解其上月、今天、下月、日历块点击事件及模板源码等内容。 上月、下月按钮点击事件:点击上月、下月后…

    Vue 2023年5月29日
    00
  • JS实现的简单标签点击切换功能示例

    首先来讲一下JS实现的简单标签点击切换功能示例的攻略。 1. 确定页面结构和元素 首先我们需要确定页面结构和需要被点击切换的标签元素。在示例中,我们可以使用HTML ul 和 li 标签来实现。 <ul class="tab"> <li class="active">标签1</li>…

    Vue 2023年5月28日
    00
  • vue与react详细

    Vue与React详细攻略 1. 概述 Vue和React是当前最流行的JavaScript框架之二,Vue是一款建构用户界面的渐进性框架,React则是一款快速构建UI界面的JavaScript库。这两款框架在构建Web应用、移动应用和桌面应用的时候都表现出了出色的性能和稳定性,因此备受开发者和企业青睐。 2. 开发者使用场景 两者在开发者使用场景上可能有…

    Vue 2023年5月28日
    00
  • Vue实现全局异常处理的几种方案

    关于Vue实现全局异常处理的几种方案,我将在以下几个方面展开讲解: 为什么需要全局异常处理 Vue的错误处理机制 实现方式与方案对比 1. 为什么需要全局异常处理 在开发中,往往需要处理很多错误情况,这些错误可能是前端的语法错误、网络请求失败、后台接口异常等等。对于这些错误我们需要进行详细的处理,让用户可以更好地感觉到我们的产品质量和体验。而且全局异常处理不…

    Vue 2023年5月28日
    00
  • vue代码分割的实现(codesplit)

    Vue.js 是一款流行的构建用户界面的 JavaScript 框架。它具有优雅的 API 设计、高效的渲染和灵活的数据绑定,目前已经成为了不少前端工程师喜欢的框架之一。其中,Vue 中的代码分割是进行性能优化时经常用到的一个关键概念。 代码分割能够将你的代码库划分为更小的块单元,以便实现懒加载 (lazy-loading) 和按需加载 (on-demand…

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