首先看一下效果圖 css
全部行要從下方上移這點很好實現,<tbody>
相對於<table>
下移就好了,而實現逐行壘加則要考慮兩點:vue
這裏的第二點有個疑問:後端
時間上有間隙,那是使用animation-delay
,來讓每段動畫生效時間不一樣好呢,仍是將每段動畫的animation-duration
寫成等差數列好。框架
彷佛使用delay
比較符合邏輯,但在試驗後發現,使用delay
有個問題,那就是在延遲的這段時間裏,每一行之間是沒有空隙的,由於這段動畫我選擇用animation
屬性來實現,animation
只是一個展現的過程,在動畫結束後,最終頁面呈現的效果(每行之間的距離)是在一開始就定義好的,因此我無法在寫樣式的時候就提早給每個<tr>
加上間距,這個間距只能在keyframe
裏定義,因此使用delay
的話,在animation
生效以前行與行之間是沒有間距的,因此這裏得用duration
寫成等差數列來實現。測試
綜合上述,再整理一下思路,總體實現的過程大概是這樣的:動畫
<table>
固定位置<tbody>
相對於<table>
下移<tbody>
中的每一個<tr>
相對於<tbody>
下移,且每一個<tr>
之間的下移量與動畫持續時間呈一個等差數列用css實現位移有兩個屬性網站
經測試發現<tr>
標籤設置了position
屬性後,並不能使用top
、bottom
、left
、right
來移動,而使用transform
時能夠用translate()
來移動,那麼理所應當的就要用transform🌶。ui
因爲每次從後端拿到的數據有幾條是不肯定的,再加上每一個<tr>
的動畫樣式都是不一樣的(由於上文提到的時間與空間的間隔),因此animation
和keyframe
的css代碼並無法寫成固定的,而是必須動態生成,大致思路是code
<tr>
的HTMLCollection
,根據length
來動態生成animation
與keyframe
,併爲每個<tr>
加上對應的class思路整理的差很少,接下來就是代碼的實現了。orm
算了,這篇筆記就整理整理思路好了,代碼實現🕊了