JavaScript:从DOM概述到window对象的常见事件

一、BOM概述

1.BOM的概念

BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window

2.BOM的构成

BOM比DOM更大,它包含DOM

window对象是浏览器的顶级对象,它具有双重角色

1.它是JS访问浏览器窗口的一个接口

2.它是一个全局对象,定义在全局作用域中的变量,函数都会编程window对象的属性和方法,在调用的时候可以省略window,像alert()、prompt()等

注意:window下的一个特殊属性window.name本身有含义,尽量避免定义name变量

二、window对象的常见事件

1.窗口加载事件 

(1)针对window

window.onload = function(){}

或者

window.addEventListener("load",function(){})

window.onload是窗口(页面)加载事件,当文档内容完全加载完成会触发该事件(包括图形、脚本文件、CSS文件等),就调用的处理函数

注意:

1.使用window.onload可以将script写在页面任何一个位置,不再像之前一样智能写在要加JS属性的HTML标签语句下了

2.window.onload传统注册事件方式只能写一次,如果有多个,回忆最后一个window.onload为准

3.使用addEventListener没有限制 

传统注册事件方式: 

window.onload = function () {var btn = document.querySelector('button');btn.addEventListener('click', function () {alert('点击');})
}

事件监听注册事件方式:

window.addEventListener('load', function () {var btn = document.querySelector('button');btn.addEventListener('click', function () {alert('点击');})
})

(2)针对document

document.addEventListener('DOMContentLoaded',function(){})

DOMContentLoaded事件触发时,晋档dom加载完成,不包括样式表,图片,flash等

IE9以上才支持

如果页面的图片很多,从用户访问到onload触发肯需要较长时间,交互效果就不能实现,必然影响用户的体验,此时用DOMContentLoadd事件比较合适

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

2.调整窗口大小事件

window.onresize = finction(){}

或者

window.addEventListener("resize",function(){})

window.onresize是调整窗口大小加载事件,当触发时就调用的处理函数

注意:

1.只有窗口大小发生像素变化,就会触发这个事件

2.我们经常用这个事件完成响应式布局。window.innerWidth 当前屏幕的宽度

3.定时器

(1)setTimeout()

window.setTimeout(调用函数,[延迟的毫秒数]);

 setTimeout()方法用于设置一个定时器,该定时器在定时器到期后执行调用函数

语法规范:

1.window在调用时可以省略

2.这个延时时间单位是毫秒,但是可以省略,默认是0

3.这个调用函数可以自己写函数,还可以写函数名

        例如

function callkbak() {console.log('爆炸了');
}
setTimeout(callkbak, 3000);

4.页面中可能有很多计时器,我们经常给定时器加标识符(名字)

var time1 = setTimeout(callkbak, 3000);
var time2 = setTimeout(callkbak, 5000);

  setTimeout()这个函数调用我们也称为回调函数callback

普通函数是按照代码顺序直接调用 

案例:5秒后自动关闭的广告

var ad = document.querySelector('img');
setTimeout(function () {ad.style.display = 'none';
}, 5000);

(2)clearTimeout()

clearTimeout()方法取消了先前通过调用setTimeout()建立的定时器

注意:

1.window可以省略

2.里面的参数就是定时器的标识符

        例如:

var btn = document.querySelector('button');
timer = setTimeout(function () {console.log('爆炸了');
}, 5000);
btn.addEventListener('click', function () {clearTimeout(timer);
})

(3)setInterval()

window.setTimeout(调用函数,[延迟的毫秒数]);

setInterval()这个调用函数也称为回调函数

注意:

1.window可以省略

2.可以直接写函数,或者写函数名或者采取字符串‘函数名()’三种形式

        例如:

setInterval(function () {console.log(1);
}, 1000);

 setInterval()与setTimeout()的区别:

  1.  setInterval()是间隔这个时间后执行,只执行一次
  2. setTimeout()是每隔这个时间执行一次,重复执行

案例:倒计时

css:

span {display: inline-block;height: 20px;width: 20px;text-align: center;line-height: 16px;font-size: 16px;color: #fff;background-color: #000;margin: 5px;
}

HTML:

<div><span class="hour">1</span><span class="minute">2</span><span class="second">3</span>
</div>

JavaScript:

var hour = document.querySelector('.hour');
var minute = document.querySelector('.minute');
var second = document.querySelector('.second');
var inputTime = +new Date('2025-7-22 18:00:00');
count();
setInterval(count, 1000);
function count() {var nowTime = +new Date();var times = (inputTime - nowTime) / 1000;var h = parseInt(times / 60 / 60 % 24);h = h < 10 ? '0' + h : h;hour.innerHTML = h;var m = parseInt(times / 60 % 60);m = m < 10 ? '0' + m : m;minute.innerHTML = m;var s = parseInt(times % 60);s = s < 10 ? '0' + s : s;second.innerHTML = s;
}

(4)clearInterval()

window.clearInterval(intervalID);

clearInterval()方法取消了先前通过调用setInterval()建立的计时器

注意:

1.window可以省略

2.里面的参数就是定时器的标识符

        例如:对于一个开始按钮和结束按钮看,要使点击开始后开始计数,点击结束后结束计数

var start = document.querySelector('.start');
var stop = document.querySelector('.stop');
start.addEventListener('click', function () {timer = setInterval(function () {console.log('hi');}, 1000);
})
stop.addEventListener('click', function () {console.log('bye');clearInterval(timer)
})

 案例:发送短信

点击按钮后,该按钮60秒内不能再点击

对于一个发送按钮

<button>发送</button>

给它设置JS

var btn = document.querySelector('button');
var time = 60;
btn.addEventListener('click', function () {btn.disabled = true;var timer = setInterval(function () {if (time == 0) {clearInterval(timer);btn.disabled = false;btn.innerHTML = '发送';time = 60;}else {btn.innerHTML = '还剩下' + time + '秒';time--;}}, 1000);
})

(5)this

this的指向在函数定义的时候无法确定,只有再函数执行的时候才能确定this到底指向谁,一般情况下this指向的是调用它的对象 

1.全局作用域或者普通函数里this指向全局对象window

        直接输出this的指向,为window

console.log(this);//window

        输出函数里this的指向,也是window

function fun() {console.log(this);//window
}
fun();

2.方法调用中,谁调用指向谁

var o = {sayHi: function () {console.log(this);//o}
}
o.sayHi();
var btn = document.querySelector('button');
btn.addEventListener('click', function () {console.log(this);//btn
});

3.构造函数中this指向构造函数

function fn() {console.log(this);//fun
}
var fun = new fn();

 

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

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

相关文章

qobject与event事件应用

int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWidget mainWidget;mainWidget.setWindowTitle("QObject与事件处理示例");mainWidget.resize(200, 200);mainWidget.show();return a.exec(); }QApplication a(argc, argv);&#xff1a;创建 QAppli…

QTableView复选框居中

目录 方法一&#xff1a;QSS方法2:自定义复选框委托类一、构造函数 CheckBoxDelegate()二、paint() 方法三、editorEvent() 方法四、关键设计要点五、扩展应用场景六、代码示例&#xff08;补充&#xff09; 方法一&#xff1a;QSS QTableView::indicator {position: relative…

基于QT的仿QQ音乐播放器

一、项目介绍 该项目是基于QT开发的⾳乐播放软件&#xff0c;界面友好&#xff0c;功能丰富&#xff0c;主要功能如下&#xff1a; 窗口hand部分&#xff1a; 点击最小化按钮&#xff0c;窗口最小化 点击最大化按钮&#xff0c;窗口最大化 点击关闭按钮&#xff0c;程序退出 …

SQL知识点合集---第二弹

数据一 <select id"listPositionAuditCheckSample" resultType"net.nxe.cloud.content.server.entity.PositionAuditCheckSample"><trim prefixOverrides"union all"><if test"userSampleCount ! null and userSampleCount…

【QT】QT控制硬件

QT控制硬件 1.上位机程序开发2.具体例子控制led灯3. linux中的函数跟QT类里面的函数同名&#xff0c;发生冲突4.示例代码 1.上位机程序开发 QT做一个上位机程序&#xff0c;控制底层的硬件设备(下位机) 总结&#xff1a; 在构造函数里面去初始化&#xff0c;打开硬件驱动在析…

Flutter介绍、Flutter Windows Android 环境搭建 真机调试

目录 Flutter介绍 Windows 环境搭建 1.安装配置JDK 2.下载安装Android Studio 3.下载配置Flutter SDK ​4.运行Flutter doctor命令检测环境是否配置成功 ​5.打开Android Studio安装Flutter/Dart 插件 ​6.插件运行Flutter项目 ​编辑 Flutter Android真机调试 Flut…

Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)

文章目录 1. 项目准备1.1 创建新项目1.2 添加必要依赖 2. 数据库设计3. 实现数据库3.1 创建实体类 (Entity)3.2 创建数据访问对象 (DAO)3.3 创建数据库类 4. 创建 Repository5. 创建 ViewModel6. 实现 UI 层6.1 创建笔记列表 Activityactivity_notes_list.xmlNotesListActivity…

Vue基础(7)_计算属性

计算属性(computed) 一、使用方式&#xff1a; 1.定义计算属性&#xff1a; 在Vue组件中&#xff0c;通过在 computed 对象中定义计算属性名称及对应的计算函数来创建计算属性。计算函数会返回计算属性的值。 2.在模板中使用计算属性&#xff1a; 在Vue的模板中&#xff0c;您…

辛格迪客户案例 | 华道生物细胞治疗生产及追溯项目(CGTS)

01 华道&#xff08;上海&#xff09;生物医药有限公司&#xff1a;细胞治疗领域的创新先锋 华道&#xff08;上海&#xff09;生物医药有限公司&#xff08;以下简称“华道生物”&#xff09;是一家专注于细胞治疗技术研发与应用的创新型企业&#xff0c;尤其在CAR-T细胞免疫…

[26] cuda 应用之 nppi 实现图像格式转换

[26] cuda 应用之 nppi 实现图像格式转换 讲述 nppi 接口定义通过nppi实现 bayer 格式转rgb格式官网参考信息:http://gwmodel.whu.edu.cn/docs/CUDA/npp/group__image__color__debayer.html#details1. 接口定义 官网关于转换的原理是这么写的: Grayscale Color Filter Array …

2025“钉耙编程”中国大学生算法设计春季联赛(8)10031007

题目的意思很好理解找从最左边到最右边最短路&#xff08;BFS&#xff09; #include <bits/stdc.h> using namespace std; int a[510][510]; // 存储网格中每个位置是否有障碍&#xff08;1表示有障碍&#xff0c;0表示无障碍&#xff09; int v[510][510]; // 记录每…

【Linux】第十一章 管理网络

目录 1.TCP/IP网络模型 物理层&#xff08;Physical&#xff09; 数据链路层&#xff08;Date Link&#xff09; 网络层&#xff08;Internet&#xff09; 传输层&#xff08;Transport&#xff09; 应用层&#xff08;Application&#xff09; 2. 对于 IPv4 地址&#…

python_股票月数据趋势判断

目录 前置 代码 视频&月数据 前置 1 A股月数据趋势大致判断&#xff0c;做一个粗略的筛选 2 逻辑&#xff1a; 1&#xff09;取最近一次历史最高点 2&#xff09;以1&#xff09;中最高点为分界点&#xff0c;只看右侧数据&#xff0c;取最近一次最低点 3&#xf…

Python PyAutoGUI库【GUI 自动化库】深度解析与实战指南

一、核心工作原理 底层驱动机制&#xff1a; 通过操作系统原生API模拟输入使用ctypes库调用Windows API/Mac Cocoa/Xlib屏幕操作依赖Pillow库进行图像处理 事件模拟流程&#xff1a; #mermaid-svg-1CGDRNzFNEffhvSa {font-family:"trebuchet ms",verdana,arial,sans…

Spring框架allow-bean-definition-overriding详细解释

Spring框架中&#xff0c;allow-bean-definition-overriding 是一个控制是否允许覆盖同名Bean定义的配置属性。以下是详细说明&#xff1a; ​1. 作用​ ​允许/禁止Bean定义覆盖​&#xff1a;当Spring容器中检测到多个同名的Bean定义时&#xff0c;此配置决定是否允许后续的…

机器人抓取位姿检测——GRCN训练及测试教程(Pytorch)

机器人抓取位姿检测——GRCN训练及测试教程(Pytorch) 这篇文章主要介绍了2020年IROS提出的一种名为GRCN的检测模型,给出了代码各部分的说明,并给出windows系统下可以直接复现的完整代码,包含Cornell数据集。 模型结构图 github源码地址:https://github.com/skumra/robo…

在web应用后端接入内容审核——以腾讯云音频审核为例(Go语言示例)

腾讯云对象存储数据万象&#xff08;Cloud Infinite&#xff0c;CI&#xff09;为用户提供图片、视频、语音、文本等文件的内容安全智能审核服务&#xff0c;帮助用户有效识别涉黄、违法违规和广告审核&#xff0c;规避运营风险。本文以音频审核为例给出go语言示例代码与相应结…

GraphRAG知识库概要设计展望

最近研究了一下GraphRAG&#xff0c;写了一个文档转换工具还有图可视化工具&#xff0c;结合langchain构建RAG经验&#xff0c;还有以前的数据平台&#xff0c;做了一个知识库概要设计&#xff0c;具体应用欢迎留言探讨。 一、GraphRAG整体概述 GraphRAG图基检索增强生成&…

Android Studio 日志系统详解

文章目录 一、Android 日志系统基础1. Log 类2. 日志级别 二、Android Studio 中的 Logcat1. 打开 Logcat2. Logcat 界面组成3. 常用 Logcat 命令 三、高级日志技巧1. 自定义日志工具类2. 打印方法调用栈3. 打印长日志4. JSON 和 XML 格式化输出 四、Logcat 高级功能1. 自定义日…

深度对比:Objective-C与Swift的RunTime机制与底层原理

1. RunTime简介 RunTime&#xff08;运行时&#xff09;是指程序在运行过程中动态管理类型、对象、方法等的机制。Objective-C 和 Swift 都拥有自己的运行时系统&#xff0c;但设计理念和实现方式有很大不同。理解 RunTime 的底层原理&#xff0c;是掌握 iOS 高级开发的关键。…