用户體驗一直是前端開發需要考慮的重要部分,在數據請求時常見到鎖屏的loading動畫,而現在越來越多的產品傾向於使用Skeleton Screen Loading(骨架屏)替代,以優化用户體驗。
原文鏈接
Skeleton Screen
Skeleton Screen(骨架屏)就是在頁面數據尚未加載前先給用户展示出頁面的大致結構,直到請求數據返回後再渲染頁面,補充進需要顯示的數據內容。常用於文章列表、動態列表頁。
請求處理
無論是PC端還是移動端,只要有數據請求都會出現一定的延遲時間,之前對於這段等待時間的處理也是各不相同。同步請求中頁面會卡住,直到請求完成,用户期間無法進行任何操作,有一種死機的感覺,體驗較差。異步請求中大多數會以鎖屏的loading動畫過渡等待時間,於是,也就出現了製作不同loaidng狀態的炫技。
Skeleton Screen優勢
鎖屏loading在一定程度限制了用户的操作,所以為了進一步提升用户體驗,Skeleton Screen被越來越多的公司產品採用,如:Facebook、簡書、知乎、掘金等,在動態、文章加載時預先渲染出結構佈局,數據加載完成後再填充數據顯示,這樣的好處在於不干擾用户操作,使用户對於加載的內容有一個大致的預期,特別是弱網絡環境下極大的優化了用户體驗。
Skeleton Screen實現
主要步驟:
1、創建與顯示內容相似的html結構
2、在需要顯示內容的元素上增加背景色
第一種
簡單堆砌出元素結構
html
<div class="skeleton">
<div class="skeleton-head"></div>
<div class="skeleton-body">
<div class="skeleton-title"></div>
<div class="skeleton-content"></div>
</div>
</div>
css
.skeleton {
padding: 10px;
}
.skeleton .skeleton-head,
.skeleton .skeleton-title,
.skeleton .skeleton-content {
background: rgb(194, 207, 214);
}
.skeleton-head {
width: 100px;
height: 100px;
float: left;
}
.skeleton-body {
margin-left: 110px;
}
.skeleton-title {
width: 500px;
height: 60px;
}
.skeleton-content {
width: 260px;
height: 30px;
margin-top: 10px;
}
第二種
背景動畫,html結構相同,修改部分css樣式
.skeleton .skeleton-head,
.skeleton .skeleton-title,
.skeleton .skeleton-content {
background: rgb(194, 207, 214);
background-image: linear-gradient(90deg,rgba(255, 255, 255, 0.15) 25%, transparent 25%);
background-size: 20rem 20rem;
animation: skeleton-stripes 1s linear infinite;
}
@keyframes skeleton-stripes {
from {
background-position: 0 0 ;
}
to {
background-position: 20rem 0;
}
}
第三種
元素結構長度變化
.skeleton {
padding: 10px;
}
.skeleton .skeleton-head,
.skeleton .skeleton-title,
.skeleton .skeleton-content {
background: rgb(194, 207, 214);
}
.skeleton-head {
width: 100px;
height: 100px;
float: left;
}
.skeleton-body {
margin-left: 110px;
}
.skeleton-title {
width: 500px;
height: 60px;
transform-origin: left;
animation: skeleton-stretch .5s linear infinite alternate;
}
.skeleton-content {
width: 260px;
height: 30px;
margin-top: 10px;
transform-origin: left;
animation: skeleton-stretch .5s -.3s linear infinite alternate;
}
@keyframes skeleton-stretch {
from {
transform: scalex(1);
}
to {
transform: scalex(.3);
}
}
總結
前端優化彷彿是一種無止境的探索,尤其是現在產品對於用户體驗的重視,任何一點體驗的改善與提升都會增加用户的友好度,最終使產品留下一個好印象。