Javascript 获取已加载页面的百分比。Vue.js

Javascript 获取已加载页面的百分比。Vue.js,javascript,vue.js,Javascript,Vue.js,如何实时获取Vue.js加载页面的百分比,以便在此页面上显示?谷歌里什么都没有,每个人都在谈论设置超时来解决这个问题:)顺便问一下,这是真的吗 我上个星期就想这么做了。 我发现我无法得到任何百分比,只有开始和结束的时刻 我唯一能想到的就是这种模拟: 在退出的组件上: 在beforeDestroy上,激活加载程序,并在约0.3秒内加载30% 在进入的组件上 如果您没有任何需要加载的数据->在比前30%更短的时间内将加载程序加载到100% 如果您有数据需要加载->在第一个30%->触发器$http的

如何实时获取Vue.js加载页面的百分比,以便在此页面上显示?谷歌里什么都没有,每个人都在谈论设置超时来解决这个问题:)顺便问一下,这是真的吗

我上个星期就想这么做了。 我发现我无法得到任何百分比,只有开始和结束的时刻

我唯一能想到的就是这种模拟:

在退出的组件上:

  • 在beforeDestroy上,激活加载程序,并在约0.3秒内加载30%
  • 在进入的组件上

  • 如果您没有任何需要加载的数据->在比前30%更短的时间内将加载程序加载到100%
  • 如果您有数据需要加载->在第一个30%->触发器$http的同时加载另一个30%,并且当您得到响应时,在比前30%更短的时间内将加载程序加载到100%
  • 我的建议是,在一个mixin中使用beforeDestroy加载30%和一个mounted事件来加载下一个70%,该事件基于一个布尔变量“isDataToLoad”(默认为true),您可以在mounted()之前创建的事件中将其转换为“false”(并自动加载70%)


    希望能有所帮助

    我上周就想这么做了。 我发现我无法得到任何百分比,只有开始和结束的时刻

    我唯一能想到的就是这种模拟:

    在退出的组件上:

  • 在beforeDestroy上,激活加载程序,并在约0.3秒内加载30%
  • 在进入的组件上

  • 如果您没有任何需要加载的数据->在比前30%更短的时间内将加载程序加载到100%
  • 如果您有数据需要加载->在第一个30%->触发器$http的同时加载另一个30%,并且当您得到响应时,在比前30%更短的时间内将加载程序加载到100%
  • 我的建议是,在一个mixin中使用beforeDestroy加载30%和一个mounted事件来加载下一个70%,该事件基于一个布尔变量“isDataToLoad”(默认为true),您可以在mounted()之前创建的事件中将其转换为“false”(并自动加载70%)

    希望对您有所帮助。

    有一篇文章介绍如何使用导航计时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:

    有一篇文章介绍如何使用导航计时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: