如何实时加载Vue.js的页面百分比,以便在此页面上显示? Google中没有任何内容,每个人都在谈论针对这个问题的setTimeout :)顺便问一下,这是真的吗?
答案 0 :(得分:2)
使用Navigation Timing API测量页面加载进度的文章here。以此为基础,您可以创建可在您的网页上使用的mixin
:
const PageLoadProgress = {
created() {
let perfData = window.performance.timing;
let estimatedTime = Math.abs(perfData.loadEventEnd - perfData.navigationStart);
this.loadTime = parseInt((estimatedTime / 1000) % 60) * 100;
this.doProgress();
},
methods: {
doProgress() {
let step = this.loadTime / 100;
this.interval = setInterval(() => {
this.loadingPercent++
}, step);
}
},
computed: {
loaded() {
return this.loadingPercent + '%'
}
},
watch: {
loadingPercent(val) {
if (val >= 100) {
console.log('complete');
clearInterval(this.interval)
}
}
},
data() {
return {
loadingPercent: 0,
loadTime: 0,
interval: null
}
}
}
所有这一切都需要估算的网页加载时间,然后使用setInterval
计算百分比的更新频率,我还添加了watcher
来清除时间间隔负载进度达到100%。
您需要做的就是显示您的加载进度。我使用的是计算机,因为如果你想更新进度条,它会更容易传递给width属性,所以:
<div v-if="loadingPercent < 100">
<div class="progress-bar">
<div class="fill" :style="{width:loaded}"> {{loaded}}</div>
</div>
</div>
<div v-else>
Page Loaded
</div>
几乎就是这样。重要的是要注意这是一个估计值,因此在加载程序达到100%之后页面可能仍未完全加载。如果这是一个问题,您可能需要附加一个onload
事件来检查加载是否完整,但我会将其留给您。
无论如何,JSFiddle:https://jsfiddle.net/13kmujoL/
答案 1 :(得分:1)
上周我试图这样做。 我发现我不能得到任何百分比,只有开始的那一刻,并且结束。
我唯一能想到的就是这种模拟:
在退出的组件上:
在输入的组件
上我的建议是在mixin中使用beforeDestroy加载30%,然后根据布尔变量“isDataToLoad”(默认为true)加载下一个70%,可以转换为“false”(和在mount()
之前创建的事件中加载70%的atumatically)希望有所帮助