【JavaScript 漫游】【026】进度事件简记

news2024/11/16 21:38:47

城市鸟瞰
文章简介

本篇文章为【JavaScript 漫游】专栏第 025 篇文章,简单记录了进度事件的知识点。

进度事件的种类

进度事件用来描述资源加载的进度,主要由 AJAX 请求、<img><audio><video><style><link> 等外部资源的加载触发,继承了ProgressEvent接口。它主要包含以下几种事件。

  • abort:外部资源中止加载时(比如用户取消)触发。如果发生错误导致中止,不会触发该事件
  • error:由于错误导致外部资源无法加载时触发
  • load:外部资源加载成功时触发
  • loadstart:外部资源开始加载时触发
  • loadend:外部资源停止加载时触发,发生顺序排在 errorabortload 等事件的后面
  • progress:外部资源加载过程中不断触发
  • timeout:加载超时时触发

除了资源下载,文件上传也存在这些事件。

image.addEventListener('load', function (event) {
  image.classList.add('finished');
});

image.addEventListener('error', function (event) {
  image.style.display = 'none';
});

有时候,图片加载会在脚本运行之前就完成,尤其是当脚本放置在网页底部的时候,因此有可能 loaderror 事件的监听函数根本不会执行。所以,比较可靠的方式,是用 complete 属性先判断一下是否加载完成。

function loaded() {
  // ...
}

if (image.complete) {
  loaded();
} else {
  image.addEventListener('load', loaded);
}

由于 DOM 的元素节点没有提供是否加载错误的属性,所以 error 事件的监听函数最好放在 <img> 元素的 HTML 代码中,这样才能保证发生加载错误时百分之百会执行。

<img src="/wrong/url" onerror="this.style.display='none';" />

loadend 事件的监听函数,可以用来取代 abort 事件、load 事件、error 事件的监听函数,因为它总是在这些事件之后发生。

req.addEventListener('loadend', loadEnd, false);

function loadEnd(e) {
  console.log('传输结束,成功失败未知');
}

loadend 事件本身不提供关于进度结束的原因,但可以用它来做所有加载结束场景都需要做的一些操作。

另外,error 事件有一个特殊的性质,就是不会冒泡。所以,子元素的 error 事件,不会触发父元素的 error 事件监听函数。

ProgressEvent 接口

ProgressEvent 接口主要用来描述外部资源加载的进度,比如 AJAX 加载、<img><video><style><link> 等外部资源加载。进度相关的事件都继承了这个接口。

浏览器原生提供了 ProgressEvent() 构造函数,用来生成事件实例。

new ProgressEvent(type, options);

第一个参数是字符串,表示事件的类型,这个参数是必须的。第二个参数是一个配置对象,表示事件的属性,该参数可选。配置对象除了可以使用 Event 接口的配置属性,还可以使用下面的属性,所有这些属性都是可选的。

  • lengthComputable:布尔值,表示加载的总量是否可以计算,默认是 false
  • loaded:整数,表示已经加载的量,默认是 0
  • total:整数,表示需要加载的总量,默认是0

ProgressEvent 具有对应的实例属性

  • ProgressEvent.lengthComputable
  • ProgressEvent.loaded
  • ProgressEvent.total

如果 ProgressEvent.lengthComputablefalseProgressEvent.total 实际上是没有意义的

var p = new ProgressEvent('load', {
  lengthComputable: true,
  loaded: 30,
  total: 100,
});

document.body.addEventListener('load', function (e) {
  console.log('已经加载:' + (e.loaded / e.total) * 100 + '%');
});

document.body.dispatchEvent(p);
// 已经加载:30%
var xhr = new XMLHttpRequest();

xhr.addEventListener('progress', updateProgress, false);
xhr.addEventListener('load', transferComplete, false);
xhr.addEventListener('error', transferFailed, false);
xhr.addEventListener('abort', transferCanceled, false);

xhr.open();

function updateProgress(e) {
  if (e.lengthComputable) {
    var percentComplete = e.loaded / e.total;
  } else {
    console.log('不能计算进度');
  }
}

function transferComplete(e) {
  console.log('传输结束');
}

function transferFailed(evt) {
  console.log('传输过程中发生错误');
}

function transferCanceled(evt) {
  console.log('用户取消了传输');
}

上面是下载过程的进度事件,还存在上传过程的进度事件。这时所有监听函数都要放在 XMLHttpRequest.upload 对象上面。

var xhr = new XMLHttpRequest();

xhr.upload.addEventListener('progress', updateProgress, false);
xhr.upload.addEventListener('load', transferComplete, false);
xhr.upload.addEventListener('error', transferFailed, false);
xhr.upload.addEventListener('abort', transferCanceled, false);

xhr.open();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1480699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何知道当前ubuntu的版本

查看版本&#xff1a; cat /etc/lsb-release 查看内核&#xff1a; uname -a

[AutoSar]BSW_Com07 CAN报文接收流程的函数调用

目录 关键词平台说明一、背景二、顺序总览三、函数说明3.1 Com_RxIndication&#xff08;&#xff09; 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:布局约束)

通过组件的宽高比和显示优先级约束组件显示效果。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 aspectRatio aspectRatio(value: number) 指定当前组件的宽高比。 卡片能力&#xff1a; 从API vers…

本地navicate连接vm虚拟机中的mysql5.7docker容器

一&#xff0c;配置 前提是我已经启动的mysql5.7容器 使用 docker ps -a 查看所有的容器 使用 docker exec -it c4f9 bash 进入mysql命令行&#xff0c;注意这个c4f9是容器唯一id&#xff0c;不用写全连接mysql mysql -uroot -p123456&#xff0c;连接成功后 输入 show datab…

JOSEF约瑟 FHP-33Q/4跳位、合位、电源监视综合控制继电器 凸出式板前接线 0.1-10S

FHP-33系列跳位、合位、电源监视综合控制继电器系列型号&#xff1a;FHP-33A/1跳位、合位、电源监视综合控制继电器&#xff1b;FHP-33A/2跳位、合位、电源监视综合控制继电器&#xff1b;FHP-33A/3跳位、合位、电源监视综合控制继电器&#xff1b;FHP-33A/4跳位、合位、电源监…

3/1作业

1.用fwrite和fread将任意bmp图片&#xff0c;修改成德国的国旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) { FILE* fp fopen("1.bmp","r")…

传输线与反射(六)

只要信号遇到瞬时阻抗突变&#xff0c;就会发生反射。反射信号的量值由瞬时阻抗的变化量决定&#xff0c;将反射电压与入射电压的比值称为反射系数&#xff0c;可以用如下公式计算&#xff1a; 反射是造成单一线网络中所有信号质量的问题根源。为减小影响&#xff0c;需要做到以…

海豚调度DolphinScheduler入门学习

DS简介&#xff1a; DolphinScheduler 是一款分布式的、易扩展的、高可用的数据处理平台&#xff0c;主要包含调度中心、元数据管理、任务编排、任务调度、任务执行和告警等模块。其技术架构基于 Spring Boot 和 Spring Cloud 技术栈&#xff0c;采用了分布式锁、分布式任务队列…

考研机试C++题目精选

更多内容会在godownio.github.io更新 算法练习&#xff08;C代码&#xff09; 考研上机或C语言代码笔试准备&#xff0c;暨大机试原题letcode牛客中南大等高校机试 快速幂算法 题目&#xff1a;输入一个整数 n &#xff0c;求 n^n 的个位数是多少。 快速幂算法&#xff1a;…

【算法】长短期记忆网络(LSTM,Long Short-Term Memory)

这是一种特殊的循环神经网络&#xff0c;能够学习数据中的长期依赖关系&#xff0c;这是因为模型的循环模块具有相互交互的四个层的组合&#xff0c;它可以记忆不定时间长度的数值&#xff0c;区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。 原理 黄…

B端系统:导航机制设计,用户体验提升的法宝

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。很多B端系统体验不好很大一部分原因在于导航设计的不合理&#xff0c;让用户无所适从&#xff0c;大大降低了操作体验&#xff0c;本文着重分析B端系统的导航体系改如何设计&#xff0c…

android零基础入门,零基础入门android

工欲行其事&#xff0c;必先利其器 1.B4A B4A是Android的基础版&#xff0c;这是一种可简化编程的Android的应用程序开发工具。这是一个IDE&#xff0c;可以允许开发者使用Basic语言来创建Android移动应用。Basic语言是一种过程化编程语言&#xff0c;因为其简单易学&#xff…

SCA软件成分同源分析-代码匹配技术

被检项目源代码的识别在多个语言解析器的支持下工作&#xff0c;根据不同匹配算法&#xff0c;可以计算与特征值索引数据库的匹配情况。针对强匹配算法&#xff0c;源代码的特征值必须与索引数据库的特征值一致&#xff0c;才可认为是该开源组件&#xff1b;针对非强匹配算法&a…

快速批量检测paypal账号

在跨境电商中&#xff0c;通常用多个paypal来收款&#xff0c;但是paypal账号经常会被封禁&#xff0c;如何快速查看paypal账号是否正常&#xff0c;成为跨境电商一个难题。 发现一个工具网站&#xff0c;可以试试

从预训练到通用智能(AGI)的观察和思考

1.预训练词向量 预训练词向量&#xff08;Pre-trained Word Embeddings&#xff09;是指通过无监督学习方法预先训练好的词与向量之间的映射关系。这些向量通常具有高维稠密特征&#xff0c;能够捕捉词语间的语义和语法相似性。最著名的预训练词向量包括Google的Word2Vec&#…

写作软件,批量写作文章的软件

在信息爆炸的时代&#xff0c;写作软件成为许多人提高效率、优化内容的利器。本文将介绍6款不同的写作软件&#xff0c;以及知名的147GPT生成工具和文心一言AI生成软件&#xff0c;它们不仅可以帮助用户快速生成原创文章&#xff0c;还支持全自动SEO优化&#xff0c;提升文章在…

无字母数字rce总结(自增、取反、异或、或、临时文件上传)

目录 自增 取反 异或 或 临时文件上传 自增 自 PHP 8.3.0 起&#xff0c;此功能已软弃用 在 PHP 中&#xff0c;可以递增非数字字符串。该字符串必须是字母数字 ASCII 字符串。当到达字母 Z 且递增到下个字母时&#xff0c;将进位到左侧值。例如&#xff0c;$a Z; $a;将…

GaussDB跨云容灾:实现跨地域的数据库高可用能力

背景 金融、银行业等对数据的安全有着较高的要求&#xff0c;同城容灾建设方案&#xff0c;在绝大多数场景下可以保证业务数据的安全性&#xff0c;但是在极端情况下&#xff0c;如遇不可抗力因素等&#xff0c;要保证数据的安全性&#xff0c;就需要采取跨地域的容灾方案。 …

专访win战略会任志雄:澳门旅游业复苏 挖掘游客消费潜力

南方财经:各个国家地区的客商都有不同文化背景和消费习惯,应如何更好吸引外地客商来澳门? win战略会任志雄:首先,周边国家的市场潜力都非常大,包括韩国、日本、越南和印度。 这些年来,这些国家的经济增长都很高,居民的出游比重也在持续增加,如果他们国家的居民把澳门作为一个重…

计算机专业大学生的简历,为何会出现在垃圾桶

为什么校招过后垃圾桶里全是简历&#xff0c;计算机专业的学生找工作有多难&#xff1f; 空哥这么跟你说吧&#xff0c;趁现在还来得及&#xff0c;这些事情你一定要听好了。 第一&#xff0c;计算机专业在学校学的东西是非常有限的&#xff0c;985211的还好&#xff0c;如果…