配色: 字号:
JavaScript前端开发案例教程-第8章 BOM
2022-11-08 | 阅:  转:  |  分享 
  
第8章 BOM《JavaScript前端开发案例教程(第2版)》学习目标/Target章节概述/ Summary在实际开发中,使用JavaS
cript开发网页交互效果时,经常需要获取浏览器的一些信息,控制浏览器的刷新和页面跳转。为了能够使JavaScript控制浏览器,
浏览器提供了BOM。本章将对BOM进行详细讲解。目录/ContentsBOM简介8.1 先定一个小目标!了解什么是BOM,能够说出
BOM的概念并列举常见的BOM对象8.1 BOM简介8.1 BOM简介浏览器对象模型(Brower Object Model,BO
M)是浏览器提供的用于JavaScript与浏览器窗口进行交互的一系列对象。8.1 BOM简介由于没有统一的BOM标准,每个浏览器
都有自己的BOM实现方法,BOM的浏览器兼容性较差。常见的BOM对象有:8.1 BOM简介在BOM中,顶级对象是window,表示
浏览器窗口,其他对象都是window对象的属性。document对象表示文档,它既属于BOM又属于DOM;location对象用于
操作浏览器地址;navigator对象用于获取浏览器的基本信息;history对象用于操作历史记录;screen对象用于获取屏幕信
息。BOM对象8.2 先定一个小目标!掌握window对象,能够使用window对象获取窗口相关的信息8.2.1 window对
象window对象:在JavaScript中具有双重角色,它既是浏览器窗口对象又是一个全局对象。全局对象在书写时可以省略,举例如下
。document可以写成window.document。console可以写成window.console。alert()可以写
成window.alert()。prompt()可以写成window.prompt()。8.2.1 window对象在开发中,定
义在全局作用域中的变量、函数,其实都是window对象的属性、方法,下面通过代码演示这一现象,示例代码如下。8.2.1 wind
ow对象// 全局作用域中的变量是window对象的属性var num = 10;console.log(window.num);
// 输出结果:10// 全局作用域中的函数是window对象的方法function fn() { return 11;}co
nsole.log(window.fn()); // 输出结果:11window对象中除了document、location、n
avigator、screen和history属性外,还有哪些属性和方法?8.2.1 window对象window对象中其他常用
的属性和方法如下。8.2.1 window对象 先定一个小目标!掌握location对象,能够使用location对象获取当前U
RL地址相关的信息8.2.2 location对象location对象用于操作浏览器地址,通过location对象可以获取当前窗
口的URL地址相关的信息。location对象既是window对象的属性又是document对象的属性。8.2.2 locati
on对象location对象常用的属性和方法如下。8.2.2 location对象8.2.2 location对象locati
on对象常用属性和方法的说明如下。search属性通常用于在向服务器查询信息时传入查询条件,如页码、搜索的关键字、排序方式等;re
load()方法只有1个可选参数forceReload,它是一个布尔值,当值为true时,将强制浏览器从服务器加载页面资源,当值为
false或者未传参时,浏览器则可能从缓存中读取页面。assign()在打开指定URL时,会生成一条新的历史记录,而replace
()方法不会生成新的记录,并且在调用replace()方法后,用户不能返回到前一个页面。Tip下面以URL为例演示location
对象的常用属性。http://127.0.0.1:5500/test.html?name=a#data8.2.2 locatio
n对象当通过上述URL打开页面时,location对象常用属性的获取结果如下。console.log(location.searc
h); // 输出结果:?name=aconsole.log(location.hash); // 输出结果:#datacons
ole.log(location.host); // 输出结果:127.0.0.1:5500console.log(locati
on.hostname); // 输出结果:127.0.0.1console.log(location.href); // 输出
结果与原URL地址相同console.log(location.pathname); // 输出结果:/test.htmlcons
ole.log(location.port); // 输出结果:5500console.log(location.protoco
l); // 输出结果:http:下面通过代码演示location对象常用方法的使用。8.2.2 location对象locat
ion.assign(''index.html''); // 加载当前目录下的index.htmllocation.replace(''
index.html''); // 将当前页面替换为index.htmllocation.reload(); // 刷新当前页面
先定一个小目标!掌握navigator对象,能够使用navigator对象获取浏览器相关的信息8.2.3 navigator对象
8.2.3 navigator对象navigator对象用于获取有关浏览器的信息,不同浏览器的差异较大。?下面以userAgen
t属性为例演示该属性的使用。var msg = navigator.userAgent;console.log(msg);8.2.
3 navigator对象获取浏览器发送到服务器的User-Agent的值8.2.3 navigator对象Chrome浏览器
的输出结果如下。Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.
36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36Firefox浏览
器的输出结果如下。Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/
20100101 Firefox/69.0IE浏览器(IE 9)的输出结果如下。Mozilla/5.0 (compatible;
MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0
.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6
.0; .NET4.0C; .NET4.0E; InfoPath.3) 先定一个小目标!掌握history对象,能够使用histo
ry对象实现浏览器前进和后退8.2.4 history对象history对象可以对用户在浏览器中访问过的历史记录进行操作。出于安
全方面的考虑,history对象不能直接获取用户浏览过的历史记录,但可以控制浏览器的“后退”和“前进”等功能。?history对象
常用的属性和方如下。8.2.4 history对象下面演示history对象的使用。history.forward(); //
控制浏览器“前进一页”history.back(); // 控制浏览器“后退一页”history.go(2); // 控制浏览
器“前进两页”history.go(-2); // 控制浏览器“后退两页”8.2.4 history对象当go()方法的参数d
elta的值是负整数时,表示“后退”指定的页数;是正整数时,表示“前进”指定的页数;是0或省略使表示刷新页面。Tip 先定一个小目
标!掌握screen对象,能够使用screen对象获取屏幕的相关信息8.2.5 screen对象screen对象用于获取屏幕相关
的信息,如屏幕的宽度和高度等。?8.2.5 screen对象下面演示screen对象的使用。console.log(screen
.width); // 示例结果:1920console.log(screen.height); // 示例结果:1080cons
ole.log(screen.availWidth); // 示例结果:1920console.log(screen.availH
eight); // 示例结果:1032上述代码中screen属性获取的结果都是数字型像素值。screen.availHeight
属性的获取结果比screen.height属性的获取结果小了48px,这是因为Windows系统的任务栏占用了48px的屏幕可用空
间。8.2.5 screen对象窗口事件8.3 先定一个小目标!掌握窗口加载与卸载事件,能够在窗口加载和卸载时执行特定操作8.3
.1 窗口加载与卸载事件8.3.1 窗口加载与卸载事件窗口事件是指window对象的事件,它与整个窗口有关。常用的窗口事件有窗
口加载与卸载事件、窗口大小事件。窗口加载、卸载事件的使用场景:如果要在窗口加载完成后执行某些代码,或在窗口卸载时执行某些代码时可以
使用。8.3.1 窗口加载与卸载事件窗口加载与卸载事件如下。针对load和unload事件的说明如下。load事件会在网页文档以
及外链的文件(包括图像文件、JS文件、CSS文件等)全部加载完成后才会触发;unload事件会在用户关闭网页时触发。窗口加载与卸载
事件有两种注册方式,示例代码如下。// 方式1window.onload = function () {};window.onun
load = function () {};// 方式2window.addEventListener(''load'', funct
ion () {});window.addEventListener(''unload'', function () {});方式1只
能注册一个事件处理函数,方式2可以注册多个事件处理函数,只需多次调用window.addEventListener()即可。8.3
.1 窗口加载与卸载事件当网页中的图片有很多时,如果图片加载速度慢,窗口加载事件的触发可能需要较长的时间,这样会影响到用户的体验
。怎么解决呢?我们可以使用document.DOMContentLoaded事件,它会在文档加载完成时触发,与图像文件、JavaS
cript文件和CSS文件等外部文件是否加载完成无关,适用于页面中外部文件有很多的情况。多学一招:document.DOMCont
entLoaded8.3.1 窗口加载与卸载事件document.DOMContentLoaded事件不兼容IE 9之前版本的浏
览器。Tip 先定一个小目标!掌握窗口大小事件,能够在窗口大小调整时执行特定操作8.3.2 窗口大小事件在开发中,如何知道用户当
前是否正在调整浏览器窗口大小?8.3.2 窗口大小事件在开发中,如果需要知道用户是否正在调整浏览器窗口大小,可以使用窗口大小事件
resize,该事件有两种注册方式,如下所示。// 方式1window.onresize = function () {};//
方式2window.addEventListener(''resize'', function () {});8.3.2 窗口大小事
件接下来通过案例演示当用户调整窗口大小时,在控制台输出当前页面的宽度,示例代码如下。8.3.2 窗口大小事件定时器8.4 先定一个小目
标!掌握定时器方法,能够完成定时器的设置与清除8.4.1 定时器方法8.4.1 定时器方法轮播图效果和倒计时效果可以使用定时器
相关方法实现。window对象提供了setTimeout()和setInterval()两种设置定时器的方法,以及clearTim
eout()、clearInterval()两种清除定时器的方法。8.4.1 定时器方法setTimeout()和setInte
rval()方法的相同点和不同点如下。相同点:这两个方法都可以在一个固定时间段内执行代码。不同点: setTimeout()方法只
执行一次代码,而setInterval()方法会在指定的时间后自动重复执行代码。8.4.1 定时器方法setTimeout()和
setInterval()方法都有2个参数,说明如下。第1个参数表示到达延迟时间后执行的代码,可以传入普通函数、匿名函数或字符串代
码。第2个参数表示延迟时间的毫秒值。8.4.1 定时器方法定时器的清除方法setTimeout()和setInterval()方
法的返回值为定时器ID(定时器的唯一标识)。将定时器ID作为参数传给clearTimeout()或clearInterval()方
法可以清除定时器。下面以setTimeout()方法为例演示定时器的设置,示例代码如下。// 传入普通函数setTimeout(f
n, 3000);function fn() { console.log(''JavaScript'');}// 传入匿名函数set
Timeout(function () {alert(''JavaScript'');}, 3000);// 传入字符串代码setTi
meout(''alert("JavaScript");'', 3000); 8.4.1 定时器方法下面以clearTimeout(
)方法为例演示定时器的清除,示例代码如下。// 设置定时器时,保存定时器idvar timer = setTimeout(func
tion () { alert(''JavaScript'');}, 3000);// 清除定时器时,传入要清楚的定时器IDcle
arTimeout(timer);8.4.1 定时器方法当通过clearTimeout()方法清除定时器后,该定时器将不再执行。
先定一个小目标!掌握60秒内只能发送一次短信案例的开发,能够利用定时器相关的方法实现短信的发送8.4.2 【案例】60秒内只能
发送一次短信本案例将会利用setInterval()和clearInterval()方法完成一个发送短信的案例,要求60秒内只能发
送一次短信。8.4.2 【案例】60秒内只能发送一次短信8.4.2 【案例】60秒内只能发送一次短信案例分析在页面中放一个文本
框和一个“发送”按钮,文本框用于输入手机号码,输入完成后,单击“发送”按钮,该按钮在60秒以内不能再次被单击,防止重复发送短信。并
且,在单击“发送”按钮之后,该按钮中的文字会变为“还剩下60秒”,并且“60”会每秒减1。当60秒过去后,按钮恢复为初始状态。左图
为页面初始效果,右图为单击发送按钮之后的效果。8.4.2 【案例】60秒内只能发送一次短信 先定一个小目标!熟悉同步和异步的概念
,能够说出同步和异步的区别8.4.3 同步和异步JavaScript的执行机制是单线程,意味着所有任务需要排队,前一个任务结束,
才会执行后一个任务,如果其中一个任务执行的时间过长,就会阻塞后面的任务。8.4.3 同步和异步例如,有3个任务正在排队,第1个任
务是在控制台输出“1”,第2个任务是5秒后在控制台输出“2”,第3个任务是在控制台输出“3”。当程序执行到任务2时,程序就被阻塞了
5秒,之后才能执行第3个任务。如何解决这个问题呢?8.4.3 同步和异步8.4.3 同步和异步我们可以通过定时器来解决,使用s
etTimeout()设置一个5秒的定时器,将第2个任务放到定时器函数中,示例代码如下。console.log(1); // 第
1个任务setTimeout(function () { console.log(2); // 第2个任务}, 5000);co
nsole.log(3); // 第3个任务当调用setTimeout()方法后,该方法会立即执行完成,然后执行后面的代码,在控
制台中输出3。而为setTimeout()传入的函数,它会在到达指定时间后执行。8.4.3 同步和异步程序中有“异步”和“同步”
两种操作方式,使用定时器解决阻塞的问题,这样的操作称为异步操作。关于“异步”和“同步” 操作方式具体解释如下。同步:前一个任务结束
后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的。异步:在处理一件任务的同时,可以去处理其他的任务。8.4.3 同步和
异步有这样一个问题:当定时器的时间设为0的时候,到底是定时器传入的回调函数优先执行,还是setTimeout()后面的代码优先执行
呢?多学一招:JavaScript执行机制console.log(1);setTimeout(function () { con
sole.log(2);}, 0);for (var i = 0, str = ''''; i < 900000; i++) { s
tr += i; }console.log(3);利用字符串拼接运算拖慢执行时间8.4.3 同步和异步setTimeout()后
面的代码优先执行,而为定时器传入的回调函数是最后执行。多学一招:JavaScript执行机制8.4.3 同步和异步在JavaSc
ript中,同步任务都是放在主线程的执行栈中优先执行的,而异步任务(回调函数中的代码)则被放在任务队列中等待执行。下面演示执行栈和
任务队列的区别。一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,被读取的异步任务就会进入执行栈开始执行
。 先定一个小目标!掌握动手实践:制作交通信号灯的实现方法,能够实现交通信号灯切换功能动手实践:制作交通信号灯案例需求:利用Jav
aScript实现交通信号灯,其中,红灯时长为30秒,绿灯时长为35秒,黄灯时长为5秒。页面中的3个圆表示3个信号灯,分别是红灯、黄灯和绿灯,绿灯右边的数字35是倒计时,每隔1秒会减1,当减到0时会换灯。动手实践:制作交通信号灯编写HTML页面,创建信号灯外层容器div,在容器中放4个div,分别表示红灯、黄灯、绿灯和倒计时。创建信号灯对象,分别创建红灯对象、黄灯对象、绿灯对象,以及倒计时对象,然后对象中定义2个方法,分别用于切换下一个灯和设置倒计时数值。实现信号灯切换效果,设置页面刚打开时显示的灯和倒计时,然后通过setInterval()设置定时器,每隔1秒触发一次,当触发时,将持续时间减1,然后判断持续时间是否小于或等于0,如果判断满足,则需要切换成下一个灯,否则,不切换灯,只更新倒计时。案例实现思路如下。动手实践:制作交通信号灯本章小结本章首先讲解了BOM的基本概念,接着讲解了常用的BOM对象,包括window对象、location对象、navigator对象、history对象以及screen对象,然后讲解了窗口事件,包括窗口加载与卸载事件、窗口大小事件,最后讲解了定时器的使用。希望读者通过本章的学习,能够通过BOM来完成一些常见的页面交互效果。本章小结
献花(0)
+1
(本文系籽油荃面原创)