首页 > 其他分享 >如何实现网页加载进度条

如何实现网页加载进度条

时间:2025-01-01 18:31:15浏览次数:5  
标签:function 网页 进度条 progressBar var return 加载

  1. 基于HTML5和JavaScript的简单进度条实现

    • 原理:利用window.onload事件和document.readyState属性来跟踪页面加载进度。document.readyState有不同的状态值,如loading(正在加载)、interactive(文档已被解析,“交互时间”开始)和complete(文档和所有子资源已完成加载)。
    • 实现步骤
      • 首先,在HTML页面中创建一个进度条元素。可以使用<div>标签来表示进度条,例如:
      <div id="progressBar"></div>
      
      • 然后,在CSS中设置进度条的样式,包括宽度、高度、背景颜色等。例如:
      #progressBar {
        width: 0%;
        height: 20px;
        background - color: #3498db;
      }
      
      • 最后,在JavaScript中实现进度条的更新逻辑。例如:
      window.onload = function () {
        var progressBar = document.getElementById('progressBar');
        progressBar.style.width = '100%';
      };
      window.addEventListener('DOMContentLoaded', function () {
        var progressBar = document.getElementById('progressBar');
        progressBar.style.width = '50%';
      });
      
    • 优点:简单易懂,不需要引入额外的库,与HTML和JavaScript的原生知识紧密结合。
    • 缺点:这种方式只能提供大致的加载进度,对于更详细的资源加载(如图片、脚本等)的进度显示不够精确。
  2. 使用Ajax加载部分页面内容时的进度条

    • 原理:当使用Ajax技术加载页面内容时,可以通过XMLHttpRequest对象的progress事件来获取数据加载的进度。这个事件会在数据传输过程中不断触发,提供已传输的数据量和总数据量等信息。
    • 实现步骤
      • 假设使用fetch API进行Ajax请求,首先创建一个函数来发送请求并更新进度条。例如:
      function loadDataWithProgress() {
        var progressBar = document.getElementById('progressBar');
        fetch('your - api - url')
       .then(function (response) {
          if (!response.ok) {
            throw new Error('Network response was not OK');
          }
          var contentLength = response.headers.get('Content - Length');
          var receivedLength = 0;
          var reader = response.body.getReader();
          return new ReadableStream({
            start: function (controller) {
              return pump();
              function pump() {
                return reader.read().then(function ({ done, value }) {
                  if (done) {
                    controller.close();
                    return;
                  }
                  receivedLength += value.length;
                  var progress = (receivedLength / contentLength) * 100;
                  progressBar.style.width = progress + '%';
                  controller.enqueue(value);
                  return pump();
                });
              }
            }
          });
        })
       .then(function (stream) {
          return new Response(stream).text();
        })
       .then(function (data) {
          // 在这里处理接收到的数据,如更新页面内容等
        });
      }
      
    • 优点:对于通过Ajax加载的内容,可以提供更精确的进度显示,增强用户体验。
    • 缺点:实现相对复杂,需要对fetchReadableStream等概念有一定的了解,并且只适用于Ajax请求部分,不能完全代表整个页面的加载进度。
  3. 借助第三方库(如NProgress.js)实现进度条

    • 原理:像NProgress.js这样的库通过监听页面加载事件和各种资源(如图片、脚本等)的加载情况,自动计算并更新进度条的进度。
    • 实现步骤
      • 首先,引入NProgress.js库。可以通过下载库文件并在HTML中引入,或者使用CDN链接引入。例如:
      <script src="https://unpkg.com/nprogress@0.2.0/nprogress.js"></script>
      <link rel="stylesheet" href="https://unpkg.com/nprogress@0.2.0/nprogress.css" />
      
      • 然后,在JavaScript中初始化进度条。例如:
      NProgress.start();
      window.addEventListener('load', function () {
        NProgress.done();
      });
      
    • 优点:使用方便,能够自动跟踪多种资源的加载进度,提供较为精确的进度显示;有较好的样式和动画效果,美观度较高。
    • 缺点:需要引入外部库,增加了项目的依赖;可能需要根据项目的具体需求对库的样式和行为进行一定的定制。

标签:function,网页,进度条,progressBar,var,return,加载
From: https://www.cnblogs.com/zsnhweb/p/18646165

相关文章

  • 常见图片懒加载方式有哪些
    原生JavaScript实现懒加载原理:利用浏览器的可视区域(getBoundingClientRect函数可以获取元素相对于视窗的位置)来判断图片是否进入可视区域。当图片进入可视区域时,将图片的src属性设置为真实的图片地址,从而实现懒加载。实现步骤:首先,将图片的src属性设置为一个占位符(通常是一......
  • 基于html+css+js实现的登录注册静态网页
    基于html+css+js实现的登录注册静态网页添加了登录注册的丝滑切换,页面出现的效果,动态背景,纯css的响应式布局效果图展示:登录效果图展示:注册html部分代码:`<divclass="container"><divclass="forms-container"><divclass="for......
  • Web期末作业网页设计-家乡宣传
    1、总体描述1、网页设计主题为湖南•长沙。2、该网站分别通过地理环境、饮食文化、家乡特产、荣誉称号四大板块来介绍湖南长沙。3、网站在构建中主要使用div与HTML标签构建,在此基础上更注重排版与色彩的搭配,板块通用性较强,易于后期的维护和板块的更换。4、网页在制作中对某......
  • 请说说webpack的模块加载原理
    Webpack的模块加载原理是Webpack作为前端模块化打包工具的核心机制之一,它允许Web应用将各种资源视为模块,并通过特定的加载机制来组织和打包这些模块。以下是Webpack模块加载原理的详细解释:初始化:Webpack首先会读取配置文件(通常是webpack.config.js),从中获取项目的入口文件、输出......
  • vue-router如何实现懒加载?
    在Vue.js项目中,使用vue-router进行路由管理时,懒加载(也叫延迟加载)是一种优化策略,它允许我们按需加载路由对应的组件,而不是在应用启动时一次性加载所有组件。这可以显著提高首屏加载速度,特别是对于大型应用来说。vue-router支持基于Vue异步组件的懒加载。下面是如何在vue-router中......
  • 398.大学生HTML期末大作业 —【薛之谦明星主题精品网页(7页)】 Web前端网页制作 html+
    目录一、网页简介二、网页文件三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强欢迎来到我的CSDN主页!您的支持是我创作的动力!Web前端网页制作、网页完整代码、大学生期末大作业案例模板完整代码、技术交......
  • 推荐一个可以总结、翻译网页的网站:ReadWeb.ai
    直接访问网站readweb.ai,输入想要翻译或总结的网址(记住需要输入完整的URL,要加https://):https://CheckNumber.AI然后回车,稍等一会儿,翻译和总结的结果就出来了:https://readweb.ai/en/page/627d6130ec03988fd01316db91940a58另外,还可以选择各种语言对照版本的,我们试试选择“英中......
  • 国标GB28181网页直播平台LiteGBS遇到摄像机图像马赛克严重怎么处理?
    在处理LiteGBS国标GB28181软件遇到摄像机图像马赛克严重的问题时,我们需要从多个角度进行综合分析和调整。马赛克现象可能由多种因素引起,包括摄像头的分辨率设置、码流控制、网络带宽限制、摄像头与监控平台的兼容性问题,以及摄像头的硬件性能等。那么当用户遇到摄像机图像马赛克......
  • HTML5网页设计成品:汽车介绍特斯拉 (dreamweaver作业静态HTML网页设计模板)
    ......
  • web前端期末大作业:旅游网页设计与实现——个人旅游博客(4页)HTML+CSS (2)
    ......