WEB页面的生命周期,DOMContentLoaded,load,beforeunload,unload

简言

理解WEB页面的生命周期,文档加载事件及顺序对WEB开发有十分的重要意义。如果不理解,在元素未加载就提前操作元素,则得不到想要的结果。而如果页面完全加载完成后,再进行操作,则又会影响用户体验。

一般来说,大多数的操作我们都应该放在DOMContentLoaded事件中执行。采用如下形式:

document.addEventListener('DOMContentLoaded', function () {alert("DOMContentLoaded");
});

当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完成加载。

说明

理解WEB页面的生命周期,文档加载事件及顺序对WEB开发有十分的重要意义。用过JQuery都知道,我们大多将代码写在$(document).ready()中,当文档加载完成后,就会执行该函数。如果不这样做,在文档未加载完成之前操作DOM,就得不到想要的结果。

演示程序

<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8"><title>42度空间-Html页面的生命周期,DOMContentLoaded,load,beforeunload,unload</title>
</head>
<body>
<div id="main"></div>
<iframe src="http://res.42du.cn/static/html/iframe.html" height="35" onload="append('iframe onload')"></iframe>
<div><img src="http://res.42du.cn/up/201802/cbbtiga6.jpg?cache=none" onload="append('image onload')"></div>
<script>var output = "";function print() {document.getElementById("main").innerHTML  = output;}function append(data) {output  = data " <br />";}document.addEventListener('readystatechange', function () {append("readyState : " document.readyState);});document.addEventListener('DOMContentLoaded', function () {append("DOMContentLoaded");});window.onload = function () {append("window onload");print();};append("script executed");
</script>
</body>
</html>

从演示程序运行结果,得出一般浏览器的加载顺序如下:

  • script executed
  • readyState : interactive
  • DOMContentLoaded
  • image onload
  • iframe onload
  • readyState : complete
  • window onload

从以上可以看出同步的Script总是先于其它事件执行,而window.onload事件总是最后执行。而image onload和iframe onload的先后顺序并不确定。

结论

关于WEB页面的生命周期,一般你应该记住如下这些观点,一些观点从运行结果中也可以得出。

  • 同步的JavaScript脚本最先执行,它先于DOMContentLoaded事件执行。

  • 当DOM准备就绪时,DOMContentLoaded事件在document上触发。 我们可以在这个阶段利用JavaScript来操作DOM元素。

    • 所有脚本都执行完毕,除了那些外部使用异步(async)或延迟(defer)加载的脚本
    • 图片和其他资源可能仍在载入过程中。
  • window上的onload事件,在页面加载完所有资源后触发。 我们很少使用它,因为通常的操作不用等到最后才执行。

  • window上的beforeunload事件,该事件在用户准备离开页面,在unload事件之前触发。 如果beforeunload返回一个字符串,浏览器会给出 用户是否真的想离开的提示。

  • window上的unload事件,当用户最终离开时会触发该事件。在unload的事件处理程序中,我们只能做简单的事情,不涉及延迟或询问用户。 由于这个限制,它很少使用。

  • document.readyState表示文档的当前状态,可以在readystatechange事件中跟踪文档状态的变更。
    • loading – 文档正在载入。
    • interactive – document已经解析完毕时触发,几乎与DOMContentLoaded同时发生,但在DOMContentLoaded事件之前触发。
    • complete – 文档和资源加载完成时触发,几乎与window.onload同时发生,但在onload事件之前触发。

一般来说,大多数的操作我们都应该放在DOMContentLoaded事件中执行,而不要放在window.onload中执行。

42度空间-在线演示程序


更多专业前端知识,请上 【猿2048】www.mk2048.com

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

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

相关文章

WinAPI: SetLayeredWindowAttributes - 设置窗口的透明

这是来宾 Dolby 在 http://www.cnblogs.com/del/archive/2008/03/08/1081295.html#1096814 询问的问题. //声明: SetLayeredWindowAttributes(Hwnd: THandle; {窗口句柄}crKey: COLORREF; {透明色}bAlpha: Byte; {Alpha 值}dwFlags: DWORD {LWA_COLORKEY(1)表示使用透明…

动态规划-线性dp-hdu-4055

https://www.cnblogs.com/31415926535x/p/10423047.html 这道题是大连的某一年的现场赛的题hdu-4055 &#xff0c;&#xff0c;&#xff0c;刚开始做线性dp的题&#xff0c;&#xff0c;看了好半天才看懂解法&#xff0c;&#xff0c; 分析 参考1参考2 题目的意思就是给出一个仅…

JQuery .net WebService 参数必须一致

$.ajax({type: "POST",contentType:"application/json; charsetutf-8",url: "/LearnJQuery/ajax1.asmx/response1",data:"{username:\""$("#inputName").val()"\"}",上面的username必须和webservice中的…

c语言按shift用户随时退出,2014年云南省“三校生”高考计算机第三次模拟试卷...

密班级&#xff1a; 姓名&#xff1a; 学号&#xff1a;密 封 线 内 不 得 答 题玉龙职高2012年高考第三次模拟试卷计算机基础总分&#xff1a;150分&#xff0c;考试时间&#xff1a;120分钟。一、单项选择题(在每小题给出的四个选项中&#xff0c;只有一个是符合题目要求的&a…

无状态EJB:池化和生命周期

无状态EJB池和生命周期的摘要视图&#xff08;注释&#xff09;。 对新手有用。 。 。 。 。 EJB池&#xff1a;快速概述 EJB实例存储在称为EJB池的位置–这不过是内存中的缓存 。 无状态EJB通常按需实例化&#xff0c;即&#xff0c;当客户端调用Bean上的方法时。 但是&…

有意思的批处理

echo off setlocal enabledelayedexpansion set b/-\ /-\ ** set 速度1 set 退格 :b for /l %%i in (0,1,200) do call :a %%i goto :b :a set/a a%1%%10 set/a c%a%%%4 if %a% EQU 0 set/p▌<nul if %c% EQU 3 (set/p^|<nul) else (set/p!b:~%a%,1!<nul) ping/n %速度…

1.原生js封装的获取某一天是当年的第几周方法

function getWeek(str){//str格式为yyy-mm-dd//周日归到了本周var dnew Date(str);var dayd.getDay();var originDated.getFullYear() - "01" - "01" 00:00:00;var nowDated.getFullYear() - ((d.getMonth() 1)>9?(d.getMonth() 1):0 (d.getMonth() 1…

代码整洁之道——有意义的命名(持续更新中)

我们给变量、参数、类、包&#xff0c;源代码和源代码所在目录命名&#xff0c;也给jar文件、war文件和ear文件命名。 We name variables, parameters, classes, packages, source code, and the directory where the source code resides, as well as jar files, war files, a…

json - json对象和json字符串直接的相互转换

一、json字符串转json对象 1.json字符串转json对象 var obj JSON.parse(str); //由json字符串转换为json对象 2.获取对象的value console.log(obj.attr); console.log(obj["attr"]); 二、json对象转json字符串 var jsonstr JSON.stringify(obj); / 转载于:https://…

android根据拍摄url获取格式,Android如何通过URI获取文件路径示例代码

前言最近在工作的过程中&#xff0c;遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。因为需求的原因&#xff0c;要求拍照上传或者从相册中选择图片上传&#xff0c;而且图片是需要经过压缩的&#xff0c;大小不能超过2M。很快&#xff0c;拍照的这部分就搞定…

休眠类型初学者指南

基本映射概念 学习Hibernate时&#xff0c;许多人喜欢跳到父子关联&#xff0c;而无需掌握对象关系映射的基础知识。 在开始对实体关联进行建模之前&#xff0c;了解各个实体的基本映射规则非常重要。 休眠类型 休眠类型是SQL类型和Java原语/对象类型之间的桥梁。 这些是Hibe…

fixed 语句(C# 参考)

fixed 语句禁止垃圾回收器重定位可移动的变量。fixed 语句只能出现在不安全的上下文中。Fixed 还可用于创建固定大小的缓冲区。 备注 fixed 语句设置指向托管变量的指针并在 statement 执行期间“钉住”该变量。如果没有 fixed 语句&#xff0c;则指向可移动托管变量的指针的作…

React Antd中样式的修改

如果需要对antd的样式进行修改&#xff0c; 进入你要修改的页面 注意&#xff1a;不能直接在自己的文件下面&#xff0c;加入一个css&#xff0c;修改这个class的样式&#xff0c;应该 加入global限定&#xff0c;global {} , 在{}里面写入 .classname {} 然后在设置css样式…

android /data/data/数据作用,android 清除data/data/ 下其他应用的数据

// 需在源码下编译// 实现。。。private ClearUserDataObserver mClearDataObserver;class ClearUserDataObserver extends IPackageDataObserver.Stub {public void onRemoveCompleted(final String packageName, final boolean succeeded) {/*final Message msg mHandler.ob…

使用Akka简化交易系统

我的同事正在开发一种交易系统&#xff0c;该系统可以处理大量的传入交易。 每笔交易都涵盖一种Instrument &#xff08;例如债券或股票&#xff09;&#xff0c;并且具有某些&#xff08;现在&#xff09;不重要的属性。 他们坚持使用Java&#xff08;<8&#xff09;&#…

【Python】贪心算法入门

一.引言 本文将通过两个问题和两道例题带你入门贪心算法。 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取在当前状态下最优&#xff08;最好或最有利&#xff09;的选择&#xff0c;从而希望导致全局最优解的算法。贪心算法不保证找到全局最优…

ASP.NET MVC+LINQ开发一个图书销售站点(9):编辑目录

编辑目录和新建类似&#xff0c;这里我们用MVC提供的辅助类 1.在Model 的BookShopDBDataContext分部类里添加: 2. 在CategoryController添加如下方法(注意&#xff1a;我们添加了后端验证) 3. 修改View下的EditCategory.aspx. (注意&#xff1a;我们用了MVC提供的辅助类生成Tex…

Jenkins+maven环境部署

选择使用tomcat下运行jenkins项目&#xff0c;安装步骤如下 1. 安装tomcat&#xff0c;查看想要下载的版本 https://mirrors.cnnic.cn/apache/tomcat/ wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7.tar.gz 2. 安装jdk wget --no-c…

内外边距、浮动、布局相关

关于清除元素的内外边距&#xff1a; 1、行内元素只有左右边距、没有内外边距、内边距在ie6等低版本的浏览器中也会有问题。尽量不要给元素指定行内的内外边距&#xff1b; 2、外边距的合并 使用margin定义块元素的垂直外边距时&#xff0c;可能会出现外边距的合并&#xff…

android根据mac地址连接耳机,Android获取设备IMEI和Mac地址

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;public static boolean checkPermission(Context context, String permission) {boolean result false;if (Build.VERSION.SDK_INT > 23) {try {Class> clazz Class.forName("android.content.Contex…