您當前的位置:首頁 > 收藏

如何實現優美的骨架屏

作者:由 小雨小雨 發表于 收藏時間:2019-12-10

對於前端來說,最重要的莫過於使用者體驗了,這次我們聊一聊骨架屏 - Skeleton Screen

我們平常對於需要請求載入的內容,可能用的比較多的是loading動畫,比如在內容區域放一個菊花圖,當請求結束,並且render tree構造完成後,將菊花圖移除,展示使用者想看的內容。雖然這種方式沒啥缺點,但是現在更多的網站開始使用骨架屏代替,因為它能帶過來更好的使用者體驗。 我們看幾個例子:

facebook

如何實現優美的骨架屏

jira

如何實現優美的骨架屏

linkedin

如何實現優美的骨架屏

slack

如何實現優美的骨架屏

上圖展示中,我們可以看到每個site從骨架圖到真實內容的一個變化。如果你細心一點你會發現,不同site對於骨架圖的block位置是不一致的:

facebook將使用者固定的頭像,author,日期和一小部分文字作為骨架主體

jira則是標題和logo對應的很整齊

linkedin可以說完全沒有對齊,而是使用一種更加的展示骨架佈局

slack則是使用混合的loading方式,有骨架圖也有旋轉圓,不僅如此,slack並沒有全部使用同一種灰色值,不同的block的顏色代表的該區域的字型顏色,這又是一種切換順滑度的提升。

不過他們都有一個共同點,就是採用簡約的方式佈局,我們可以以此為例,創造出獨一無二的風格,來提高使用者體驗和加強品牌的風格,我想這會比一個loading logo帶來更好的效果。

上面簡單的介紹了一下骨架圖,接下來我們來說一下具體實現吧。

優先我們實現一個簡單的帶有loading效果的骨架結構:

<!DOCTYPE html>

<

html

lang

=

“en”

>

<

head

>

<

meta

charset

=

“UTF-8”

>

<

meta

name

=

“viewport”

content

=

“width=device-width, initial-scale=1。0”

>

<

meta

http-equiv

=

“X-UA-Compatible”

content

=

“ie=edge”

>

<

title

>

Document

title

>

<

style

>

*

{

margin

0

padding

0

}

@

keyframes

loading

{

0

%

{

background-position

-400

px

0

}

100

%

{

background-position

400

px

0

}

}

box1

{

position

absolute

margin

0

auto

left

50

%

margin-left

-400

px

top

0

width

800

px

height

60

px

background-color

blue

background-image

linear-gradient

to

right

#eeeeee

8

%

#dddddd

18

%

#eeeeee

33

%

);

animation-duration

1

s

animation-iteration-count

infinite

animation-name

loading

animation-timing-function

linear

transition

0。3

s

}

bgMasker

{

background-color

#fff

}

line1

{

background-color

#fff

height

20

px

position

absolute

right

0

top

0

left

60

px

}

line2

{

background-color

#fff

height

20

px

position

absolute

right

700

px

top

20

px

left

60

px

}

line3

{

background-color

#fff

height

20

px

position

absolute

left

400

px

right

0

top

20

px

}

line4

{

background-color

#fff

height

20

px

top

40

px

position

absolute

left

60

px

right

500

px

}

line5

{

background-color

#fff

height

20

px

position

absolute

left

600

px

right

0

top

40

px

}

style

>

head

>

<

body

>

<!—— 骨架 ——>

<

div

class

=

“box1”

>

<

div

class

=

“bgMasker line1”

>

div

>

<

div

class

=

“bgMasker line2”

>

div

>

<

div

class

=

“bgMasker line3”

>

div

>

<

div

class

=

“bgMasker line4”

>

div

>

<

div

class

=

“bgMasker line5”

>

div

>

div

>

body

>

html

>

有一點需要說一下,由於我們使用的是漸變色的動畫效果,所以我們的佈局有一點的變化,我們採用的是整體加上背景色,然後內容使用定位和left,right來構成block的方式,具體內容請參考上面的程式碼

效果如下:

如何實現優美的骨架屏

然後我們做一下簡單的骨架圖和內容的切換,這裡就不貼程式碼了,切換有很多種實現方式,不固定思維。我這邊做了兩種,一種是直接切換,一種是淡入的切換,可以簡單參考一下:

如何實現優美的骨架屏

如何實現優美的骨架屏

ssr,請求後用puppeteer插入script生成當前頁的骨架圖,或者build的時候直接生成(個人覺得應該是這種),然後插入到根元素內,然後資料載入後直接隱藏並展示真實資料

分塊,對於圖片,將採用最小大小尺寸 1 * 1的純色gif圖,然後進行拉伸

資料請求後對骨架進行隱藏等操作

標簽: background  骨架  position  left  color