如何实现网页加载进度条?

发布于 2023-12-01 16:50:48 字数 2522 浏览 30 评论 0

监听静态资源加载情况

可以通过 window.performance 对象来监听页面资源加载进度。该对象提供了各种方法来获取资源加载的详细信息。

可以使用 performance.getEntries() 方法获取页面上所有的资源加载信息。可以使用该方法来监测每个资源的加载状态,计算加载时间,并据此来实现一个资源加载进度条。

下面是一个简单的实现方式:

const resources = window.performance.getEntriesByType('resource');
const totalResources = resources.length;
let loadedResources = 0;

resources.forEach((resource) => {
  if (resource.initiatorType !== 'xmlhttprequest') {
    // 排除 AJAX 请求
    resource.onload = () => {
      loadedResources++;
      const progress = Math.round((loadedResources / totalResources) * 100);
      updateProgress(progress);
    };
  }
});

function updateProgress(progress) {
  // 更新进度条
}

该代码会遍历所有资源,并注册一个 onload 事件处理函数。当每个资源加载完成后,会更新 loadedResources 变量,并计算当前的进度百分比,然后调用 updateProgress() 函数来更新进度条。需要注意的是,这里排除了 AJAX 请求,因为它们不属于页面资源。

当所有资源加载完成后,页面就会完全加载。

实现进度条

网页加载进度条可以通过前端技术实现,一般的实现思路是通过监听浏览器的页面加载事件和资源加载事件,来实时更新进度条的状态。下面介绍两种实现方式。

1. 使用原生进度条

在 HTML5 中提供了 progress 元素,可以通过它来实现一个原生的进度条。

<progress value="0" max="100"></progress>

然后在 JavaScript 中,监听页面加载事件和资源加载事件,实时更新 progress 元素的 value 属性。

const progressBar = document.getElementById('progressBar');

window.addEventListener('load', () => {
  progressBar.value = 100;
});

document.addEventListener('readystatechange', () => {
  const progress = Math.floor((document.readyState / 4) * 100);
  progressBar.value = progress;
});

2. 使用第三方库

使用第三方库可以更加方便地实现网页加载进度条,下面以 nprogress 库为例:

安装 nprogress

bashCopy codenpm install nprogress --save

在页面中引入 nprogress.cssnprogress.js

<link rel="stylesheet" href="/node_modules/nprogress/nprogress.css">
<script src="/node_modules/nprogress/nprogress.js"></script>

在 JavaScript 中初始化 nprogress 并监听页面加载事件和资源加载事件

// 初始化 nprogress
NProgress.configure({ showSpinner: false });

// 监听页面加载事件
window.addEventListener('load', () => {
  NProgress.done();
});

// 监听资源加载事件
document.addEventListener('readystatechange', () => {
  if (document.readyState === 'interactive') {
    NProgress.start();
  } else if (document.readyState === 'complete') {
    NProgress.done();
  }
});

使用 nprogress 可以自定义进度条的样式,同时也提供了更多的 API 供我们使用,比如说手动控制进度条的显示和隐藏,以及支持 Promise 和 Ajax 请求的进度条等等。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

肤浅与狂妄

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文