认识Skeleton Screen【屏幕加载骨架】
一直以來,無論是web還是iOS、android的應(yīng)用中,為了提升應(yīng)用的加載等待這段時間的用戶感知體驗,各種奇門遁甲之術(shù)層出不窮。其中,菊花圖以及由它衍生各種加載動畫是一個非常大的流派,如下圖所示:
由它衍生而出的各種加載動畫也是遍地開花:
在很多的應(yīng)用的交互中,這種菊花的加載的設(shè)計已然要一統(tǒng)江湖了。
不過,現(xiàn)在對于加載的設(shè)計體驗有了比菊花加載體驗更棒的方法,即本文要講的Skeleton Screen Loading,中文一般叫做骨架屏。骨架屏聽起來總覺得怪怪的,本文還是沿用英文的叫法Skeleton Screen Loading。
所謂Skeleton Screen Loading即表示在頁面完全渲染完成之前,用戶會看到一個樣式簡單,描繪了當(dāng)前頁面的大致框架,感知到頁面正在逐步加載,加載完成后,最終骨架屏中各個占位部分將被真實的數(shù)據(jù)替換。
一圖勝千言,來看看微信閱讀的客戶端,它就使用了Skeleton Screen Loading來提升它的加載體驗,可以下載它的客戶端實際感受下:
現(xiàn)在好多web和客戶端都已經(jīng)放棄了以前的那種菊花的加載體驗,轉(zhuǎn)而使用Skeleton Screen Loading,比如Facebook、medium以及slack等。國內(nèi)的餓了么、掘金等也都使用Skeleton Screen Loading來提升它們的加載體驗。
下面這段話,是iOS中關(guān)于加載體驗的交互設(shè)計標(biāo)準(zhǔn)的一個說明:
Don’t make people wait for content to load before seeing the screen they’re expecting. Show the screen immediately, and use placeholder text, graphics, or animations to identify where content isn’t available yet. Replace these placeholder elements as the content loads.?—?Apple iOS Human Interface Guidelines
使用Skeleton Screen Loading也充分遵循了iOS人機(jī)交互設(shè)計指南。本文就來講講如何使用vue來實現(xiàn)Skeleton Screen Loading。
VUE實現(xiàn)思路
在本文中,我們將會使用vue組件 (Component) 功能來實現(xiàn)一個Skeleton Screen Loading,如下圖所示:
具體vue組件 (Component) 功能這里就不詳講了,可以去官方的文檔看看詳細(xì)的信息。
這里推薦一個模擬開發(fā)數(shù)據(jù)的開源服務(wù)jsonplaceholder,類似經(jīng)常使用的圖片占位服務(wù)一樣,它提供了在web開發(fā)中一些常見數(shù)據(jù)類型的api服務(wù),比如文章、評論、用戶系統(tǒng)等,都提供了對應(yīng)的接口,在開發(fā)調(diào)試階段還是非常方便的。
比如我們做的這個例子要用到用戶系統(tǒng),直接使用這個用戶數(shù)據(jù)接口就行了。
首先,主要的工作是實現(xiàn)Skeleton Screen Loading加載動畫,先使用常規(guī)的html和css來實現(xiàn)這個動畫。
動畫效果如下所示:
先定義好html結(jié)構(gòu):
<div class="timeline-item"><div class="animated-background"><div class="background-masker header-top"></div><div class="background-masker header-left"></div><div class="background-masker header-right"></div><div class="background-masker header-bottom"></div><div class="background-masker subheader-left"></div><div class="background-masker subheader-right"></div><div class="background-masker subheader-bottom"></div></div> </div>下面來說說實現(xiàn)動畫的主要思路:
要實現(xiàn)這樣的效果,需要使用一點點小技巧。先在圖層animated-background定義一個大的漸變背景,然后在不需要顯示背景圖的位置,定義幾個占位的結(jié)構(gòu)填充為白色就可以實現(xiàn)上圖所示的UI展現(xiàn)形式。最后使用background-position來移動背景圖片的位置,就可以實現(xiàn)圖中的動畫效果。
詳細(xì)的代碼可以去這里查看,demo。
主要的效果實現(xiàn)了,下面就可以正式開工來定義我們的Skeleton Screen Loading組件。
Vue.component('user-item', {props: ['email', 'name'],template: `<div><h2 v-text="name"></h2><p v-text="email"></p></div>` })Vue.component('loading-item', {template: `<div class="animated-background"><div class="background-masker header-top"></div><div class="background-masker header-left"></div><div class="background-masker header-right"></div><div class="background-masker header-bottom"></div><div class="background-masker subheader-left"></div><div class="background-masker subheader-right"></div><div class="background-masker subheader-bottom"></div></div>` })上面定義了兩個組件,一個是用來顯示用戶信息數(shù)據(jù)的組件user-item;一個在加載完之前來顯示Skeleton Screen Loading效果的loading-item組件。
定義好組件后,然后在主文件定義好對應(yīng)的結(jié)構(gòu)來注冊使用組件:
<div id="app"><div v-for="user in users" class="items" v-if="loading"><user-item :name="user.name" :email="user.email"></user-item></div><div v-for="load in loades" v-if="!loading"><loading-item></loading-item></div> </div>根據(jù)上面定義好的組件,上面的代碼表示,當(dāng)數(shù)據(jù)加載完后,顯示用戶數(shù)據(jù)。當(dāng)還沒有加載完用戶數(shù)據(jù),則顯示預(yù)先定義好的加載組件即loading-item。
var app = new Vue({el: '#app',data: {users: [],loading: false,loades: 10},methods: {getUserDetails: function() {fetch(`https://jsonplaceholder.typicode.com/users`).then(result => result.json()).then(result => {this.users = resultthis.loading = true});}},created: function() {setTimeout(() => {this.getUserDetails()}, 1000);} });一個簡單優(yōu)雅的Skeleton Screen Loading就完成了。
通過上面簡單的實例,可以明顯感受到當(dāng)使用Skeleton Screen Loading來代替?zhèn)鹘y(tǒng)的菊花圖在體驗上更加好一些。
使用Skeleton Screen Loading,可以利用一些視覺元素來將內(nèi)容的輪廓更快顯示在屏幕上,讓用戶在等待加載的過程中對將要加載的內(nèi)容有一個更加清晰的預(yù)期,特別是在弱網(wǎng)絡(luò)的場景下,Skeleton Screen Loading的體驗無疑是更好的,用起來吧。
對于Skeleton Screen Loading,你有什么樣的看法呢?歡迎在評論區(qū)留言一起分享你的看法。
總結(jié)
以上是生活随笔為你收集整理的认识Skeleton Screen【屏幕加载骨架】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ECMAScript Decorator
- 下一篇: 《React 学习之道》The Road