用戶體驗一直是前端開發須要考慮的重要部分,在數據請求時常見到鎖屏的loading動畫,而如今愈來愈多的產品傾向於使用Skeleton Screen Loading(骨架屏)替代,以優化用戶體驗。css
原文連接html
Skeleton Screen(骨架屏)就是在頁面數據還沒有加載前先給用戶展現出頁面的大體結構,直到請求數據返回後再渲染頁面,補充進須要顯示的數據內容。經常使用於文章列表、動態列表頁。前端
不管是PC端仍是移動端,只要有數據請求都會出現必定的延遲時間,以前對於這段等待時間的處理也是各不相同。同步請求中頁面會卡住,直到請求完成,用戶期間沒法進行任何操做,有一種死機的感受,體驗較差。異步請求中大多數會以鎖屏的loading動畫過渡等待時間,因而,也就出現了製做不一樣loaidng狀態的炫技。
網絡
鎖屏loading在必定程度限制了用戶的操做,因此爲了進一步提高用戶體驗,Skeleton Screen被愈來愈多的公司產品採用,如:Facebook、簡書、知乎、掘金等,在動態、文章加載時預先渲染出結構佈局,數據加載完成後再填充數據顯示,這樣的好處在於不干擾用戶操做,使用戶對於加載的內容有一個大體的預期,特別是弱網絡環境下極大的優化了用戶體驗。前端優化
主要步驟:
一、建立與顯示內容類似的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>
.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); } }
前端優化彷彿是一種無止境的探索,尤爲是如今產品對於用戶體驗的重視,任何一點體驗的改善與提高都會增長用戶的友好度,最終使產品留下一個好印象。spa