原生js页面事件
DOMContentLoaded事件
DOMContentLoaded页面的DOM树解析好并且需要等待JS执行完才触发,事件不直接等待CSS文件、图片的加载完成
事件会在文档的HTML和所有子资源(如图像和样式表)已经加载完成后触发,但不包括像CSS、图片等外部资源的加载。您可以将您的JavaScript代码包装在DOMContentLoaded事件中,以确保它们在文档完全解析后执行。
document.addEventListener("DOMContentLoaded", function () {
console.log("当前 HTML 被完全加载以及解析完成");
});
window.onload方法
window.onload() 方法用于在网页加载完毕后立刻执行的操作,即当 HTML 文档加载完毕后,立刻执行某个方法。
通常用于
元素,在页面完全载入后(包括图片、css文件等等)执行脚本代码。
window.onload = function() {
console.log("页面全部加载完成");
};
window.unload 表示卸载的意思,这个事件在从当前浏览器窗口内移动文档的位置时触发。
也就是说,通过超链接、前进或后退按钮等方式从一个页面跳转到其他页面,或者关闭浏览器窗口时触发。
beforeunload事件
beforeunload事件类型与unload事件类型功能相似,不过它更人性化,如果beforunload事件处理函数返回字符串信息,那么该字符串会显示一个确认对话框,询问用户是否离开当前页面。
window.onbeforeunload = function(e){
return "您的数据还未保存!";
}
获取URL参数
window.location.host; //返回url 的主机部分,例如:www.xxx.com
window.location.hostname; //返回www.xxx.com
window.location.href; //返回完整的url字符串
window.location.pathname; //返回请求路径 /xxx/xxx.html
window.location.protocol; //返回url 的协议部分,例如: http:,ftp:,maito:等等.
window.location.port //url 返回端口
原生js网页加载状态
当前文档的加载状态document.readyState
uninitialized
(未初始化)还没有调用send()方法loading
(载入)已调用send()方法,正在发送请求loaded
(载入完成)send()方法执行完成,已经接收到全部响应内interactive
(交互)正在解析响应内容completed
(完成)响应内容解析完成,可以在客户端调用了
if (document.readyState == "loading") {
console.log("(载入)已调用send()方法,正在发送请求");
}
停止加载
window.stop()
退出setTimeout循环闭包
本文章仅作为笔记记录
使用一个定时执行的回调函数,需要当条件num
等于5时退出当前循环。
但是,在当前的代码中,使用 return
、 break
语句是无法直接退出 for 循环的,因为 break
语句只能用于循环语句中,而不是定时器的回调函数中。
let numtime = 10;
let num = 0
for (let y = 0; y < numtime; y++) {
(function (j) {
setTimeout(function timer() {
num++
console.log("第", j, "秒");
console.log(num, "num");
if (num == 5) {
console.log("现在num等于5了,我想要退出当前", num);
// return;
// break;
}
}, j * 1000);
})(y);
}
结果将是这样,条件num等于5还是会继续往下执行:
要解决这个问题,可以将循环和定时器分开处理。可以使用一个变量来表示是否继续执行定时器,并在达到特定条件时修改该变量的值,从而实现退出定时器的效果。
let numtime = 10;
let num = 0;
let continueTimer = true;
for (let y = 0; y < numtime; y++) {
(function (j) {
setTimeout(function timer() {
if (!continueTimer) {
return;
}
num++;
console.log("第", j, "秒");
console.log(num, "num");
if (num === 5) {
console.log("现在num等于5了,我想要退出当前", num);
continueTimer = false;
}
}, j * 1000);
})(y);
}