「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」

 🎬 江城开朗的豌豆:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

 📝 个人网站 :《 江城开朗的豌豆🫛 》 

⛺️ 生活的理想,就是为了理想的生活 !

在这里插入图片描述

 

目录

引言

1. DOMContentLoaded

1.1 属性

1.2 API

1.3 应用场景

1.4 示例代码

2. load

2.1 属性

2.2 API

2.3 应用场景

3. beforeunload

3.1 属性

3.2 API

3.3 应用场景

3.4 示例代码

4. unload

4.1 属性

4.2 API

4.3 应用场景

4.4 示例代码

5. 总结


引言

在 Web 开发中,了解页面生命周期是非常重要的。页面生命周期定义了页面从加载到卸载的整个过程,包括各种事件和阶段。在本文中,我们将详细介绍四个关键事件:DOMContentLoaded、load、beforeunload 和 unload。我们将探讨这些事件的属性、API、应用场景,并提供一些代码示例和参考资料。

1. DOMContentLoaded

1.1 属性

  • type:事件类型,值为 "DOMContentLoaded"
  • bubbles:布尔值,指示事件是否会冒泡,默认为 false
  • cancelable:布尔值,指示事件是否可以被取消,默认为 false
  • target:事件的目标对象,即触发事件的元素

1.2 API

  • EventTarget.addEventListener():用于注册事件监听器,以便在 DOMContentLoaded 事件触发时执行相应的处理函数。

1.3 应用场景

DOMContentLoaded 事件在页面的 HTML 和 DOM 树加载完成后触发,但在所有外部资源(如图像、样式表、脚本等)加载完成之前。这使得我们可以在 DOM 加载完成后执行一些操作,例如初始化页面元素、注册事件监听器、执行一些初始的 JavaScript 逻辑等。

常见的应用场景包括:

  • 初始化页面元素
  • 注册事件监听器
  • 发送初始的 AJAX 请求
  • 执行一些初始的 JavaScript 逻辑

1.4 示例代码

document.addEventListener('DOMContentLoaded', function() {// DOMContentLoaded 事件触发后执行的逻辑console.log('DOMContentLoaded event triggered');
});

在上面的示例中,我们使用 addEventListener 方法注册了一个 DOMContentLoaded 事件监听器。当 DOMContentLoaded 事件触发时,控制台将输出 'DOMContentLoaded event triggered'

2. load

2.1 属性

  • type:事件类型,值为 "load"
  • bubbles:布尔值,指示事件是否会冒泡,默认为 false
  • cancelable:布尔值,指示事件是否可以被取消,默认为 false
  • target:事件的目标对象,即触发事件的元素

2.2 API

  • EventTarget.addEventListener():用于注册事件监听器,以便在 load 事件触发时执行相应的处理函数。

2.3 应用场景

load 事件在整个页面及其所有外部资源(如图像、样式表、脚本等)加载完成后触发。这意味着页面的所有内容已经可用,并且可以执行与页面渲染和交互相关的操作。

常见的应用场景包括:

  • 执行一些需要页面完全加载后才能进行的操作
  • 初始化和配置第三方库和插件
  • 启动动画或其他视觉效果

2.4 示例代码

window.addEventListener('load', function() {// load 事件触发后执行的逻辑console.log('load event triggered');
});

在上面的示例中,我们使用 addEventListener 方法注册了一个 load 事件监听器。当 load 事件触发时,控制台将输出 'load event triggered'

3. beforeunload

3.1 属性

  • type:事件类型,值为 "beforeunload"
  • bubbles:布尔值,指示事件是否会冒泡,默认为 false
  • cancelable:布尔值,指示事件是否可以被取消,默认为 true
  • target:事件的目标对象,即触发事件的元素

3.2 API

  • EventTarget.addEventListener():用于注册事件监听器,以便在 beforeunload 事件触发时执行相应的处理函数。
  • Event.preventDefault():用于阻止默认的 beforeunload 行为,例如显示浏览器默认的退出提示框。

3.3 应用场景

beforeunload 事件在页面即将被卸载(关闭、刷新、导航到其他页面等)之前触发。它通常用于询问用户是否确定离开当前页面,并可以在事件处理函数中执行一些清理操作。

常见的应用场景包括:

  • 提示用户保存未保存的数据或离开前的确认提示
  • 执行清理操作,如取消未完成的 AJAX 请求、释放资源等

3.4 示例代码

window.addEventListener('beforeunload', function(event) {// beforeunload 事件触发时执行的逻辑// 可以在这里提示用户保存未保存的数据或离开前的确认提示event.preventDefault(); // 阻止默认的 beforeunload 行为event.returnValue = ''; // Chrome 需要设置 returnValue 属性
});

在上面的示例中,我们使用 addEventListener 方法注册了一个 beforeunload 事件监听器。在事件处理函数中,我们可以执行一些提示用户保存数据或离开前的确认逻辑。通过调用 preventDefault 方法,我们阻止了默认的 beforeunload 行为,并通过设置 returnValue 属性(在某些浏览器中需要设置)为空字符串来确保提示框的显示。

4. unload

4.1 属性

  • type:事件类型,值为 "unload"
  • bubbles:布尔值,指示事件是否会冒泡,默认为 false
  • cancelable:布尔值,指示事件是否可以被取消,默认为 false
  • target:事件的目标对象,即触发事件的元素

4.2 API

  • EventTarget.addEventListener():用于注册事件监听器,以便在 unload 事件触发时执行相应的处理函数。

4.3 应用场景

unload 事件在页面即将被卸载(关闭、刷新、导航到其他页面等)时触发。它可以用于执行一些清理操作,如释放资源、取消未完成的请求等。

常见的应用场景包括:

  • 释放页面所使用的资源,如清除定时器、取消事件监听器等
  • 发送最后的统计数据或日志

4.4 示例代码

window.addEventListener('unload', function() {// unload 事件触发后执行的逻辑console.log('unload event triggered');
});

在上面的示例中,我们使用 addEventListener 方法注册了一个 unload 事件监听器。当 unload 事件触发时,控制台将输出 'unload event triggered'

5. 总结

页面生命周期的四个重要事件:DOMContentLoaded、load、beforeunload 和 unload,定义了页面从加载到卸载的不同阶段。这些事件可以帮助我们在合适的时机执行相关的操作,提供更好的用户体验和数据处理。

  • DOMContentLoaded 事件在 HTML 和 DOM 树加载完成后触发,适用于执行与 DOM 相关的初始化操作。
  • load 事件在整个页面及其外部资源加载完成后触发,适用于执行与页面渲染和交互相关的操作。
  • beforeunload 事件在页面即将被卸载之前触发,适用于询问用户是否确定离开页面或执行一些清理操作。
  • unload 事件在页面被卸载后触发,适用于执行最后的清理操作。

了解页面生命周期事件及其应用场景对于优化页面加载和交互体验非常重要。通过合理利用这些事件,我们可以在适当的时机执行相关的逻辑,提供更好的用户交互和数据处理。

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.

✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式

✅ 认为我部分代码过于老旧,可以提供新的API或最新语法

✅ 对于文章中部分内容不理解

✅ 解答我文章中一些疑问

✅ 认为某些交互,功能需要优化,发现BUG

✅ 想要添加新功能,对于整体的设计,外观有更好的建议

最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧

 

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

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

相关文章

【aloam】ubuntu20.04 配置 aloam 环境,编译过程报错及成功解决方法

为什么写这篇博客 ALOAM是slamer的必经之路,official提供的基础环境推荐ubuntu16.04或者18.04,而我用20.04已经有一段时间了,不方便换,但由于其他原因也不得不去配置。过程中出现了几个问题,在这里也就20分钟&#xf…

04在命令行中使用Maven命令创建Maven版的Web工程,并将工程部署到服务器的步骤

创建Maven版的Web工程 使用命令生成Web工程 使用mvn archetype:generate命令生成Web工程时,需要使用一个专门生成Web工程骨架的archetype(参照官网看到它的用法) -D表示后面要附加命令的参数,字母D和后面的参数是紧挨着的,中间没有任何其它…

记一次Redis Cluster Pipeline导致的死锁问题

作者:vivo 互联网服务器团队- Li Gang 本文介绍了一次排查Dubbo线程池耗尽问题的过程。通过查看Dubbo线程状态、分析Jedis连接池获取连接的源码、排查死锁条件等方面,最终确认是因为使用了cluster pipeline模式且没有设置超时时间导致死锁问题。 一、背…

掌握 Scikit-Learn: Python 中的机器学习库入门

机器学习 第二课 Sklearn 入门 概述机器学习与 Python 的完美结合Scikit-Learn 的核心组件与结构安装与配置验证安装 数据表示与预处理特征矩阵和目标向量数据处理 估计器模型的选择思考问题的本质研究数据的分布判断任务的复杂性分类问题回归问题 监督学习分类算法回归算法 无…

常见的8个JMeter压测问题

为什么在JMeter中执行压力测试时,出现连接异常或连接重置错误? 答案:连接异常或连接重置错误通常是由于服务器在处理请求时出现问题引起的。这可能是由于服务器过载、网络故障或配置错误等原因导致的。 解决方法: 确定服务器的负载…

智能警用装备管理系统-科技赋能警务

警用物资装备管理系统(智装备DW-S304)是依托互云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对警用装备进行统一管理、分析的信息化、智能化、规范化的系统。 (1)感知智能化 装备感知是整个方案的基础,本方…

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造:在工业制造过程中,精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数,进而实…

PyTorch入门教学——使用PyCharm创建一个PyTorch项目

首先需要创建好PyTorch的虚拟环境,步骤:PyTorch入门教学——简介与环境配置-CSDN博客打开PyCharm,新建项目,选择项目的存放位置。选择先前配置的解释器,也就是虚拟环境中的解释器。(记住创建的虚拟环境所在…

年龄越大,越要小心逢九年

老话有云:年龄逢九,灾祸频有。在我国的许多农村地区,至今还流传着这么句话,这句话的大概意思是说:每个人命理年龄逢九,就会有个坎,年龄越大,坎就越厉害,所以,…

【Linux】线程安全问题①——如何实现资源访问互斥(附图解与代码实现)

线程安全主要分为两个方面,分别是资源访问互斥与线程同步(线程协同配合) 本篇博客,我们主要来讲解资源访问互斥这一方面 目录 为什么要实现资源访问互斥? 实现资源访问互斥(原子访问)的经典…

Nginx正向代理配置(http)

前言 在工作中我们经常使用nginx进行反向代理,今天介绍下怎么进行正向代理,支持http请求,暂不支持https 首先先介绍下正向代理和反向代理。 正向代理 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。 反向代理 客户端只…

ThinkPHP5小语种学习平台

有需要请加文章底部Q哦 可远程调试 ThinkPHP5小语种学习平台 一 介绍 此小语种学习平台基于ThinkPHP5框架开发,数据库mysql,前端bootstrap。平台角色分为学生,教师和管理员三种。学生注册登录后可观看学习视频,收藏视频&#xf…

关于图像分割SDK的一些基础认识

随着科技的不断发展,图像分割SDK已经成为了一个备受关注的话题。而在众多图像分割SDK中,美摄图像分割SDK以其独特的功能和优势脱颖而出。本文将从美摄图像分割SDK的企业价值和互联网娱乐方面,介绍其宣传文章的具体写作规范。 在企业价值方面&…

从一到无穷大 #18 时序数据库运营SLI思考

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 公有云时序数据库SLA 运营商产品每服务周期服务可用率不低于99.9%衡量服务不可用数据指标从采…

202、RabbitMQ 之 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型---fanout类型就是广播类型

目录 ★ 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型代码演示:生产者:producer消费者:Consumer01消费者:Consumer02测试结果 完整代码ConnectionUtilPublisherConsumer01Consumer02pom.xml ★ 使用 fanout 类型的Exchange …

[Swift]同一个工程管理多个Target

1.准备 先创建一个测试工程“ADemo”,右键其Target选择Duplicate,再复制一个Target为“ADemo2”。 再选择TARGETS下方的“”,添加一个APP到项目中,这个命名为“BDemo”。 2、管理多个Target 可以对三个target分别导入不同的框…

iWall:支持自定义的Mac动态壁纸软件

iWall Mac是一款动态壁纸软件,它可以使用任何格式的漂亮视频(无须转换)、图片、动画、Flash、gif、swf、程序、网页、网站做为您的动态壁纸、动态桌面,并且可以进行交互。 这款软件功能多、使用简单、体积小巧、不占用资源、运行…

微信小程序引入阿里巴巴iconfont图标并使用

介绍 在小程序里,使用阿里巴巴的图标,如下所示: 使用方式 搜索自己需要的图标,然后将需要用到的图标加入购物车,如下图所示: 去右上角,点击购物车按钮;这里第一次使用,会有三个提…

Redis缓存穿透、缓存击穿、缓存雪崩详解

目录 缓存处理流程 一、缓存穿透 1、概念 2、解决办法 二、缓存击穿 1、概念 2、解决办法 三、缓存雪崩 1、概念 2、解决办法 缓存处理流程 接收到查询数据请求时,优先从缓存中查询,若缓存中有数据,则直接返回,若缓存中查不到则从…

Steam余额红锁的原因,及红锁后申诉办法

安全的余额一般是通过充值卡充值获得,再加上交易手续费再转卖给你。一般便宜不到哪去。 但你别以为余额是安全的,就万事大吉了。照样有被红锁的可能性,比如这三种: 1、Steam市场巡查机制,红锁 平台的巡查机制和原理…