最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于 vue-skeleton-webpack-plugin 的骨架屏實戰(zhàn)

 更新時間:2019年08月05日 08:55:41   作者:Turner  
這篇文章主要介紹了基于 vue-skeleton-webpack-plugin 的骨架屏實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

目前正在做的項目,登錄是需要跳轉(zhuǎn)到別人的頁面的,導(dǎo)致重定向很多,需要優(yōu)化一下白屏?xí)r間,所以就用到了骨架屏,但是這次用的骨架屏不是自動生成的,還是自己敲的樣式,一步步來吧,先從簡單的用起 。

先上效果圖:

 

什么是骨架屏

骨架屏,英文 Skeleton screen ,是指在頁面開始渲染之前的白屏?xí)r間內(nèi),先讓用戶看到即將要展現(xiàn)頁面的“骨架”,頁面渲染完成之后再將它替換掉,起到一個從 白屏 → 渲染完成 過程中的過渡作用,它可以有效減少用戶的感知時間,讓用戶“感覺上”認(rèn)為打開頁面比較快(相比較于完整的白屏?xí)r間)。

實現(xiàn)

本文主要圍繞一個開源的 Webpack 插件 vue-skeleton-webpack-plugin ,來實現(xiàn)在 Vue 項目中加入骨架屏。

由于項目對骨架屏的需求不同,相應(yīng)的代碼也會不一樣。 本文所實現(xiàn)的骨架屏是 基于 Vue-cli 3.x 搭建的項目 ,根據(jù)的不同路由,顯示不同的骨架屏,如需其他用法詳見開源插件。

讓我們開始吧:surfer:。

首先是安裝插件:

npm install vue-skeleton-webpack-plugin

vue.config.js

安裝完成后在 vue.config.js 中做如下配置:

const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin')
module.exports = {
 configureWebpack: (config) => {
  config.plugins.push(new SkeletonWebpackPlugin({
   webpackConfig: {
    entry: {
     app: path.join(__dirname, './src/skeleton/skeleton.js')
    }
   },
   // SPA 下是壓縮注入 HTML 的 JS 代碼
   minimize: true,
   // 服務(wù)端渲染時是否需要輸出信息到控制臺
   quiet: true,
   // 根據(jù)路由顯示骨架屏
   router: {
     mode: 'history',
     routes: [
      {
       path: '/',
       skeletonId: 'skeleton-home'
      },
      {
       path: '/message',
       skeletonId: 'skeleton-message'
      }
     ]
   }
  }
 },
 css: {
  // 使用 css 分離插件 mini-css-extract-plugin,不然骨架屏組件里的 <style> 不起作用,
  extract: true,
 }
}

其中 skeleton.js 是我們骨架屏的入口,我們過會再創(chuàng)建。先看來一下其中 router 這個配置項。

router的配置決定了我們各個路由路徑所對應(yīng)的骨架屏。

  • router.mode 填路由模式,兩個值可選 history | hash.
  • router.routes 填路由數(shù)組,其中 path 對應(yīng)著頁面在 vue-router 中的 path , skeletonId 是骨架屏的 id ,后面馬上會說明。

 skeleton.js

配置完成后,新建一個骨架屏的入口 skeleton.js。

// src/skeleton/skeleton.js
import Vue from 'vue'

// 引入的骨架屏組件
import skeletonHome from './skeleton/skeletonHome.vue'
import skeletonMessage from './skeleton/skeletonMessage.vue'

export default new Vue({
 components: {
  skeletonHome,
  skeletonMessage,
 },
 template: `
  <div>
   <skeletonHome id="skeleton-home" style="display:none"/>
   <skeletonMessage id="skeleton-message" style="display:none"/>
  </div>
 `
})

上面的代碼中,引入的兩個組件分別對應(yīng) 首頁(Home)消息頁(Message) 的骨架屏,其中組件的 id 對應(yīng)之前在 vue.config.jsskeletonId 。

貼上其中一個骨架屏組件的代碼:

// skeletonMessage.vue
<template>
 <div class="skeleton-block">
  <div class="sk-loanList-header-bg"></div>
  <s-messageItem/>
  <s-messageItem/>
  <s-messageItem/>
  <s-messageItem/>
 </div>
</template>

<script>
import messageItem from './components/s-messageListItem'
export default {
 name: 'skeletonMessage',
 components: {
  's-messageItem': messageItem
 }
}
</script>

<style scoped>
.skeleton-block {
 width:100%;
 height: 100vh;
}
.sk-loanList-header-bg {
 height:88px;
 background:#2954D0;
}
</style>

其實就是很普通的一個 Vue 組件,在組件里寫自己想要的骨架屏的樣式即可,可復(fù)用的地方還可以再分成組件。 在路由里加上 skeletonMessage ,看一下效果:

至此,現(xiàn)在骨架屏已經(jīng)準(zhǔn)備就緒了,是不是很簡單 。

效果展示

這邊模擬一下移動端訪問環(huán)境,先進(jìn)入 Chrome DevTools 中的 Performance 進(jìn)行設(shè)置。

運行 Performance:

效果:

從骨架屏替換成頁面的過程中還是有閃一下的,目前還不知道這個是否可以優(yōu)化,嘗試中。

查看一下 Performance 中不同頁面展現(xiàn)的時間:

 

(ps:解釋一下,我也不知道什么情況,運行完之后就是尼:horse:這么糊...)

可以看到在通過本地運行訪問的情況下(本地訪問較快),在進(jìn)入頁面后 221ms 頁面先展示骨架屏,隨后在 738ms 時完成頁面的渲染。

這里如果不加骨架屏的話就是 738ms 的白屏?xí)r間,我們已經(jīng)通過骨架屏優(yōu)化了一些白屏?xí)r間:surfer:。

最后

vue-skeleton-webpack-plugin 是較為初級的骨架屏方案,相信大家也可以馬上想到許多缺點。
比如:

  • 需要手動去寫骨架屏的樣式。
  • 骨架屏樣式在不同尺寸下的響應(yīng)式問題。
  • 在界面改動之后也需要手動修改對應(yīng)的骨架屏。

由于在本人的項目中使用到了 postcss-px2rem 自動 px 轉(zhuǎn) rem,所以避開了一些缺點。

其他方法

此外還有許多使用骨架屏的方法:

page-skeleton-webpack-plugin 餓了么開源的自動生成骨架屏生成插件。

用 base64 的圖片做骨架屏,就讓 UI 在出設(shè)計稿的時候順便把骨架屏也給畫了😂。

參考:
http://m.fzitv.net/article/166912.htm

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用this.$nextTick()獲取不到數(shù)據(jù)更新后的this.$refs.xxx.及場景分析

    使用this.$nextTick()獲取不到數(shù)據(jù)更新后的this.$refs.xxx.及場景分析

    今天遇到了這樣一個場景,在數(shù)據(jù)更新之后,使用this.$nextTick(()=>{console.log(this.$refs.xxx)}) 獲取不到改dom,但是用setTimeout能夠獲取到,在此記錄一下,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • Vue.js 2.5新特性介紹(推薦)

    Vue.js 2.5新特性介紹(推薦)

    Vue 2.5 Level E 已發(fā)布,在原來2.x的基礎(chǔ)上做了很多相應(yīng)改進(jìn)和對 bug 的修復(fù),目前 2.5 系列最新的版本為 2.5.2,本文給大家介紹vue 2.5 新特征,需要的朋友參考下吧
    2017-10-10
  • 關(guān)于echarts?清空上一次加載的數(shù)據(jù)問題

    關(guān)于echarts?清空上一次加載的數(shù)據(jù)問題

    這篇文章主要介紹了關(guān)于echarts?清空上一次加載的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue.js中 v-model 指令的修飾符詳解

    Vue.js中 v-model 指令的修飾符詳解

    v-model 指令默認(rèn)會在 input 事件中加載輸入框中的數(shù)據(jù)(中文輸入法中輸入拼音的過程除外)。這篇文章通過實例代碼給大家介紹Vue.js中 v-model 指令的修飾,感興趣的朋友跟隨小編一起看看吧
    2018-12-12
  • vue項目中使用iconfont方式

    vue項目中使用iconfont方式

    這篇文章主要介紹了vue項目中使用iconfont方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue增加強(qiáng)緩存和版本號的實現(xiàn)方法

    vue增加強(qiáng)緩存和版本號的實現(xiàn)方法

    這篇文章主要介紹了vue增加強(qiáng)緩存和版本號的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Map.vue基于百度地圖組件重構(gòu)筆記分享

    Map.vue基于百度地圖組件重構(gòu)筆記分享

    這篇文章主要為大家分享了Map.vue基于百度地圖組件重構(gòu)筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue組件之非單文件組件的使用詳解

    Vue組件之非單文件組件的使用詳解

    Vue中常常會把組件分為非單文件組件和單文件組件,這篇文章主要為大家介紹了非單文件組件的具體使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-05-05
  • vue2中Print.js的使用超詳細(xì)講解(pdf、html、json、image)

    vue2中Print.js的使用超詳細(xì)講解(pdf、html、json、image)

    項目中有用到打印功能,網(wǎng)上就找了print.js,下面這篇文章主要給大家介紹了關(guān)于vue2中Print.js使用(pdf、html、json、image)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • vue-resource + json-server模擬數(shù)據(jù)的方法

    vue-resource + json-server模擬數(shù)據(jù)的方法

    本篇文章主要介紹了vue-resource + json-server模擬數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論

建昌县| 祁阳县| 随州市| 阿勒泰市| 木里| 兴和县| 馆陶县| 武平县| 芜湖市| 阿巴嘎旗| 淮北市| 上虞市| 台州市| 武清区| 屏边| 阜康市| 离岛区| 乐业县| 兴安盟| 抚州市| 岑巩县| 浙江省| 尚志市| 广水市| 湛江市| 共和县| 清水河县| 沅江市| 盈江县| 平邑县| 北碚区| 砀山县| 西畴县| 杨浦区| 墨玉县| 石景山区| 尉氏县| 广饶县| 中牟县| 灵璧县| 四川省|