Javascript 获取已加载页面的百分比。Vue.js
如何实时获取Vue.js加载页面的百分比,以便在此页面上显示?谷歌里什么都没有,每个人都在谈论设置超时来解决这个问题:)顺便问一下,这是真的吗 我上个星期就想这么做了。 我发现我无法得到任何百分比,只有开始和结束的时刻 我唯一能想到的就是这种模拟: 在退出的组件上:Javascript 获取已加载页面的百分比。Vue.js,javascript,vue.js,Javascript,Vue.js,如何实时获取Vue.js加载页面的百分比,以便在此页面上显示?谷歌里什么都没有,每个人都在谈论设置超时来解决这个问题:)顺便问一下,这是真的吗 我上个星期就想这么做了。 我发现我无法得到任何百分比,只有开始和结束的时刻 我唯一能想到的就是这种模拟: 在退出的组件上: 在beforeDestroy上,激活加载程序,并在约0.3秒内加载30% 在进入的组件上 如果您没有任何需要加载的数据->在比前30%更短的时间内将加载程序加载到100% 如果您有数据需要加载->在第一个30%->触发器$http的
希望能有所帮助我上周就想这么做了。 我发现我无法得到任何百分比,只有开始和结束的时刻 我唯一能想到的就是这种模拟: 在退出的组件上:
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%时清除间隔
然后需要做的就是显示加载进度。我使用的是computed属性,因为如果要更新进度条,可以更轻松地传递到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>
{{loaded}}
页面加载
差不多就是这样。需要注意的是,这是一个估计值,因此在加载程序达到100%后,页面可能仍然无法完全加载。如果这是一个问题,您可能需要附加一个onload
事件来检查加载是否完成,但这将由您决定
总之,这里是JSFIDLE:有一篇文章介绍如何使用导航计时API来测量页面加载进度。以此为基础,您可以创建一个可在页面上使用的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%时清除间隔
然后需要做的就是显示加载进度。我使用的是computed属性,因为如果要更新进度条,可以更轻松地传递到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>
{{loaded}}
页面加载
差不多就是这样。需要注意的是,这是一个估计值,因此在加载程序达到100%后,页面可能仍然无法完全加载。如果这是一个问题,您可能需要附加一个onload
事件来检查加载是否完成,但这将由您决定
总之,这里是JSFIDLE: