当前位置: 首页 > news >正文

「深入探究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.lryc.cn/news/194766.html

相关文章:

  • SpringMVC源码分析(一)启动流程分析
  • ARM 10.12
  • vue-rouer 路由
  • 元数据的前世今生
  • Python实现简易过滤删除数字的方法
  • 软件测试定位bug方法+定位案例(详解)
  • 【算法练习Day21】组合剪枝
  • NPM相关命令
  • Kubernetes 集群部署 Prometheus 和 Grafana
  • 【算法-动态规划】零钱兑换 II-力扣 518
  • Hadoop3教程(六):HDFS中的DataNode
  • Macos音乐制作:Ableton Live 11 Suite for Mac中文版
  • ThinkPHP5小语种学习平台
  • 升级包版本之后Reflections反射包在springboot jar环境下扫描不到class排查过程记录
  • Excel 函数大全应用,包含各类常用函数
  • 深入浅出的介绍一下虚拟机VMware Workstation——part3(VMware快照)
  • 《Python基础教程》专栏总结篇
  • JavaScript 事件
  • 轻松学会这招,给大量视频批量添加滚动字幕不求人
  • 哪个文字转语音配音软件最好用?
  • 多关键词高亮显示
  • 浅谈 33 台 iPad 发展史;OpenAI“悄悄”修改了企业核心价值观丨 RTE 开发者日报 Vol.67
  • Mysql之备份(Mysqldump)
  • 算法leetcode|84. 柱状图中最大的矩形(rust重拳出击)
  • Java中通过List中的stream流去匹配相同的字段去赋值,避免for循环去查询数据库进行赋值操作
  • 开源酒店预订订房小程序源码系统+多元商户 前端+后端完整搭建教程 可二次开发
  • Leetcode 2906. Construct Product Matrix
  • 【Leetcode Sheet】Weekly Practice 11
  • 本地PHP搭建简单Imagewheel私人云图床,在外远程访问
  • Python图像处理进阶:Pillow库的中级应用