![]()
Skeleton骨架屏是常用的Loading加载状态,但是在接口返回极快的情况下页面会出现闪屏。
这里记录一下优化的方法:
1.首先新增两个组件方法:showLoading
和hideLoading
。
1 2 3 4 5
| export default class SkeletonDemo extends Vue { showLoading () {}
hideLoading () {} }
|
2.新增一个变量minLoadTime
,用来设置最短的显示时间,这里设置为300毫秒
1 2 3 4 5 6 7
| export default class SkeletonDemo extends Vue { minLoadTime = 300
showLoading () {}
hideLoading () {} }
|
3.新增一个变量loadTime
,用来记录上次loading的时间。在调用showLoading方法时记录一下开始时间
1 2 3 4 5 6 7 8 9 10
| export default class SkeletonDemo extends Vue { loadTime = 0 minLoadTime = 300
showLoading () { this.loadTime = new Date().getTime() }
hideLoading () {} }
|
4.重点来了:在结束loading时判断结束时间和开始时间的差值,差值 >=minLoadTime
则关闭Skeleton显示,否则等待差值的时间后再显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| export default class SkeletonDemo extends Vue { loadTime = 0 minLoadTime = 300
showLoading () { this.loadTime = new Date().getTime() }
hideLoading () { if (new Date().getTime() - this.loadTime < this.minLoadTime) { const interval = this.loadTime + this.minLoadTime - new Date().getTime() setTimeout(() => { }, interval) return } } }
|