一直以來,無論是web還是iOS、android的應用中,為了提升應用的加載等待這段時間的使用者感覺體驗,各種奇門遁甲之術層出不窮。其中,菊花圖以及由它衍生各種加載動畫是一個非常大的流派,如下圖所示:

由它衍生而出的各種加載動畫也是遍地開花:
在很多的應用的互動中,這種菊花的加載的設計已然要一統江湖了。
不過,現在對于加載的設計體驗有了比菊花加載體驗更棒的方法,即本文要講的Skeleton Screen Loading,中文一般叫做骨架屏。骨架屏聽起來總覺得怪怪的,本文還是沿用英文的叫法Skeleton Screen Loading。
所謂Skeleton Screen Loading即表示在頁面完全渲染完成之前,使用者會看到一個樣式簡單,描繪了目前頁面的大緻架構,感覺到頁面正在逐漸加載,加載完成後,最終骨架屏中各個占位部分将被真實的資料替換。
一圖勝千言,來看看微信閱讀的用戶端,它就使用了Skeleton Screen Loading來提升它的加載體驗,可以下載下傳它的用戶端實際感受下:
現在好多web和用戶端都已經放棄了以前的那種菊花的加載體驗,轉而使用Skeleton Screen Loading,比如Facebook、medium以及slack等。國内的餓了麼、掘金等也都使用Skeleton Screen Loading來提升它們的加載體驗。
下面這段話,是iOS中關于加載體驗的互動設計标準的一個說明:
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人機互動設計指南。本文就來講講如何使用vue來實作Skeleton Screen Loading。
在本文中,我們将會使用vue元件 (Component) 功能來實作一個Skeleton Screen Loading,如下圖所示:
具體vue元件 (Component) 功能這裡就不詳講了,可以去官方的文檔看看詳細的資訊。
這裡推薦一個模拟開發資料的開源服務jsonplaceholder,類似經常使用的圖檔占位服務一樣,它提供了在web開發中一些常見資料類型的api服務,比如文章、評論、使用者系統等,都提供了對應的接口,在開發調試階段還是非常友善的。
比如我們做的這個例子要用到使用者系統,直接使用這個使用者資料接口就行了。
首先,主要的工作是實作Skeleton Screen Loading加載動畫,先使用正常的html和css來實作這個動畫。
動畫效果如下所示:
先定義好html結構:
下面來說說實作動畫的主要思路:
要實作這樣的效果,需要使用一點點小技巧。先在圖層animated-background定義一個大的漸變背景,然後在不需要顯示背景圖的位置,定義幾個占位的結構填充為白色就可以實作上圖所示的UI展現形式。最後使用background-position來移動背景圖檔的位置,就可以實作圖中的動畫效果。
詳細的代碼可以去這裡檢視,demo。
主要的效果實作了,下面就可以正式開工來定義我們的Skeleton Screen Loading元件。
上面定義了兩個元件,一個是用來顯示使用者資訊資料的元件user-item;一個在加載完之前來顯示Skeleton Screen Loading效果的loading-item元件。
定義好元件後,然後在主檔案定義好對應的結構來注冊使用元件:
根據上面定義好的元件,上面的代碼表示,當資料加載完後,顯示使用者資料。當還沒有加載完使用者資料,則顯示預先定義好的加載元件即loading-item。
一個簡單優雅的Skeleton Screen Loading就完成了。
通過上面簡單的執行個體,可以明顯感受到當使用Skeleton Screen Loading來代替傳統的菊花圖在體驗上更加好一些。
使用Skeleton Screen Loading,可以利用一些視覺元素來将内容的輪廓更快顯示在螢幕上,讓使用者在等待加載的過程中對将要加載的内容有一個更加清晰的預期,特别是在弱網絡的場景下,Skeleton Screen Loading的體驗無疑是更好的,用起來吧。
對于Skeleton Screen Loading,你有什麼樣的看法呢?歡迎在評論區留言一起分享你的看法。
http://www.phpgang.com/facebook-style-timeline-content-loading-placeholder-with-css_4994.html
https://css-tricks.com/building-skeleton-screens-css-custom-properties/
Facilitating Better Interactions using Skeleton Screens