最近在用 element-ui 的時候,忽然有個想法,想給 el-table 加上一點入場動畫,就像下面這樣。javascript
體驗地址:codepen.io/viewweiwu/p…css
若是是 Vue 新建的工程文件,那麼直接 npm install element-ui
,html
或者能夠經過 cdn 方式把 element-ui 引入。java
<!-- 引入樣式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入組件庫 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
複製代碼
此次使用的是 less
,其實只要是 css 的預處理器,隨便選一款均可以作到,只要有循環。(固然,你直接寫 css 也是能夠的,不是很推薦。npm
.loop(@n) when (@n < 100) {
.el-table__body {
.el-table__row:nth-child(@{n}) {
opacity: 0;
animation: table-show 300ms @n * 50ms forwards ease-out;
}
}
.loop((@n + 1));
}
.loop(0);
@keyframes table-show {
0% { transform: translateY(50px); opacity: .5; }
100% { transform: translateY(0); opacity: 1; }
}
複製代碼
nth-child
的形式去選擇標籤。這裏我就簡單的生成了下 id 和 name 的 20 條數據。element-ui
let nameMap = {
0: '零',
1: '一',
2: '二',
3: '三',
4: '四',
5: '五',
6: '六',
7: '七',
8: '八',
9: '九'
}
let replaceName = (name) => {
return name.replace(/\w/g, num => nameMap[num])
}
let getData = () => {
let list = []
for (let i = 1; i <= 20; i++) {
list.push({
id: Math.ceil(Math.random() * i * 100000),
name: replaceName('王' + i)
})
}
return list
}
複製代碼
這個例子用了 pug,html 的一個模板。app
#app
el-button(@click="refresh") 刷新列表
el-table(:data="data" row-key="id")
el-table-column(label="id" prop="id")
el-table-column(label="姓名" prop="name")
複製代碼
以後只須要把數據綁定到 Vue 上就能夠了。less
new Vue({
data () {
return {
data: getData()
}
},
methods: {
refresh () {
this.data = getData()
}
}
}).$mount('#app')
複製代碼