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

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

引言


在 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


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


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

相关文章
|
24天前
|
自然语言处理 Java 数据库连接
掌握JSP页面编程:动态生成Web内容
【4月更文挑战第3天】Java Server Pages (JSP) 是一种用于创建动态Web内容的Java技术,它结合HTML并允许在页面中嵌入Java代码。JSP支持代码片段、表达式语言(EL)和JSTL标签库,简化动态内容生成。当服务器接收到请求时,执行JSP中的Java代码并将结果嵌入HTML返回给客户端。示例展示了如何显示当前日期和时间。JSP可与Servlet、JavaBeans、数据库等结合,用于构建功能丰富的交互式Web应用。
掌握JSP页面编程:动态生成Web内容
|
1月前
|
机器学习/深度学习 人工智能 前端开发
机器学习PAI常见问题之web ui 项目启动后页面打不开如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
3月前
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。
|
1月前
|
设计模式 前端开发 Shell
Python生成Web页面Web框架
Python生成Web页面Web框架
16 0
|
3月前
Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例
Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例
58 0
|
3月前
|
前端开发
使用CSS实现网格+渐变背景色的Web页面背景
使用CSS实现网格+渐变背景色的Web页面背景
29 0
|
3月前
|
边缘计算 前端开发 JavaScript
什么是 Web 应用页面渲染的 Edge Rendering 技术
什么是 Web 应用页面渲染的 Edge Rendering 技术
51 0
|
23天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
29 7
|
3天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式