首页 > 其他分享 >【前端面试题-19】简单说一下,如果前端页面要做个页面加载进度条,该通过哪些实现进度上的把控

【前端面试题-19】简单说一下,如果前端页面要做个页面加载进度条,该通过哪些实现进度上的把控

时间:2024-03-29 11:01:37浏览次数:23  
标签:面试题 进度条 前端 width 进度 progress 页面 加载

前端页面要实现一个页面加载进度条,可以通过以下步骤进行进度上的把控:

  1. HTML结构

    • 在页面中创建一个用于承载进度条的<div>元素或其他合适的元素,例如:
      <div id="progress-bar">
        <div id="progress"></div>
      </div>
      
    • progress-bar作为进度条的容器,progress则是实际表示进度的部分。
  2. CSS样式

    • 为进度条设置样式,包括背景颜色、高度、过渡动画等,以确保当宽度变化时有平滑的动画效果:
      #progress-bar {
        width: 100%;
        height: 5px;
        background-color: #f0f0f0;
      }
      #progress {
        width: 0%;
        height: 100%;
        background-color: #4caf50;
        transition: width 0.3s ease-in-out;
      }
      
  3. JavaScript 控制

    • 对于整个页面加载进度,由于浏览器本身并不直接提供页面资源加载进度的具体数据,因此模拟整个页面加载进度较为复杂,一般依赖于监听DOMContentLoaded、load事件以及可能的异步资源加载情况(如图片、脚本、Ajax请求等)。

    • 如果仅针对部分可计算加载进度的资源(比如Ajax请求),可以在请求发送时启动进度条,然后在请求响应或完成时更新进度条的宽度,例如:

      var xhr = new XMLHttpRequest();
      xhr.open('GET', 'your-resource-url');
      xhr.onprogress = function(e) {
        if (e.lengthComputable) {
          var percentComplete = e.loaded / e.total * 100;
          document.getElementById('progress').style.width = percentComplete + '%';
        }
      };
      xhr.onloadend = function() {
        // 加载结束时,设置进度条为100%
        document.getElementById('progress').style.width = '100%';
        // 或者执行完成动画后隐藏进度条
        // ...
      };
      xhr.send();
      
    • 对于整体页面加载进度的模拟,可能需要借助第三方库,如上面提到的NProgress,它可以方便地跟踪页面的加载状态并模拟出加载进度。只需调用相关API即可开始、更新和结束进度条:

      NProgress.start();
      window.addEventListener('load', function() {
        // 页面所有资源(包括图片)加载完成后
        NProgress.done();
      });
      
  4. 现代Web API

    • 使用现代浏览器提供的PerformanceObserverAPI可以获取资源加载性能数据,从而更精确地估计页面加载进度,但实现起来更为复杂,需要对资源加载顺序及大小有一定了解,并根据实际情况调整进度计算逻辑。

总结来说,实现页面加载进度条的核心在于获取到加载进度的数据,并通过JavaScript实时更新进度条元素的宽度。对于整页加载进度条,往往需要综合多种加载状态和资源加载监控手段才能较为准确地模拟出来。对于局部加载或异步操作的进度,则可以直接通过特定API获得确切的进度数据。

标签:面试题,进度条,前端,width,进度,progress,页面,加载
From: https://blog.csdn.net/ivan5277/article/details/137132275

相关文章

  • 【前端面试题-20】js如何对输出内容进行HTML编码
    在JavaScript中,对输出内容进行HTML编码通常是为了防止XSS攻击(跨站脚本攻击),即将特殊字符转换成HTML实体的形式,避免它们被浏览器解析为HTML或JavaScript代码。以下是一些常见的HTML编码方法:使用内建函数encodeURIComponent()和encodeURI()虽然这两个函数主要用于编码URI......
  • 前端学习-UI框架学习-Bootstrap5-008-信息提示框
    菜鸟教程链接提示框-基础颜色提示框可以使用.alert类,后面加上.alert-success,.alert-info,.alert-warning,.alert-danger,.alert-primary,.alert-secondary,.alert-light或.alert-dark类来实现:提示框添加链接提示框中在链接的标签上添加alert-link类来设置匹......
  • 页面全屏后antd的下拉框下拉选项不出现的问题
    最近碰到数据可视化页面需要全屏的功能,但是全屏之后antdesignofvue组件的下拉框点击之后无法出现下拉选项。原因:下拉框的下拉部分父节点默认是body,全屏后body元素被挡住了全屏功能实现:<divclass="large-screen"ref="el"><divclass="large-screen-full-btn"@click=......
  • 前端学习-UI框架学习-Bootstrap5-007-图像形状
    菜鸟教程链接圆角效果rounded<imgsrc="./img/537.jpeg"class="rounded"alt="圆角效果"height="236">椭圆rounded-circle<imgsrc="./img/537.jpeg"class="rounded-circle"alt="拖延"heig......
  • PCM文件页面播放及波形图绘制
    一、前端使用WaveSurfer.js插件来绘制波形图。针对vue项目做个简单介绍:1. 安装WaveSurfer依赖包:npminstallWaveSurfer2.页面内引用:a.html       b.js                     到此就可以对引入的需要播......
  • 面试题知识点笔记-MySQL开发
    目录可以使用MySQL直接存储文件(ppt,exel,图像等)吗?什么时候存,什么时候不存?Emoji乱码怎么办?存储的时候有遇到过什么问题吗?如何存储ip地址?长文本如何存储?大段文本如何设计表结构?大段文本查找时如何建立索引?有没有在开发中使用过TEXT,BLOB数据类型日期,时间如何存......
  • 面试题知识点笔记-MySQL日志
    目录MysqI会产生几种日志?binlog作用是什么?redolog作用是什么?undolog作用是什么?Mysql日志是否实时写入磁盘?binlog刷盘机制是如何实现的?redolog刷盘机制是如何实现的?undolog刷盘机制是如何实现的?MySQL的binlog有有几种录入格式?分别有什么区别?Mysq!集群同......
  • 国外的Java面试题和国内的相比谁更卷
    前言有很多朋友很好奇国外的Java面试题长啥样,今天我们就去找5道国外的面试来和国内的对比一下看看谁难一些!面试题分享1.IsJavaPlatformIndependentifthenhow?(Java平台是独立的吗?)Yes,JavaisaPlatformIndependentlanguage.Unlikemanyprogramminglang......
  • 2024年150道高频Java面试题(一)
    1.JDK和JRE有什么区别?JDK(JavaDevelopmentKit)和JRE(JavaRuntimeEnvironment)是Java技术的两个核心组成部分,它们之间的主要区别如下:功能定位:JDK:它是提供给Java开发者的软件开发工具包,包含了Java程序开发所需的各种工具,比如编译器(javac)、调试器(jdb)和其他工具(如java......
  • HTML精美登录页面,(动态渐变效果+稍微透明效果)
    最近,学校留的html作业做出来十分简陋学校作业如上图所示,今天我来教大家做一个精美的登录页面。以下是精美的登录页面。HTML精美登录页面接下来我来带大家写代码一,HTML代码<bodyclass="meau"><divclass="formBox"><formaction=""class="FORMF">......