【第五部分 | JS WebAPI】5:1W字详解Bom对象
创始人
2024-02-07 06:42:01

目录

| Bom概述

| window 、Bom、Dom 的关系

| window的load事件:把JS写进head里

如何把 JS 代码写到head里(页面加载事件 onload)

比onload更高效的加载事件 DOMContentLoaded

| window的resize事件(窗口大小改变的时候触发)

| 定时器

1-1 setTimeout() 定时器

1-2 回调函数的概念

1-3 清除setTimeOut定时器

2-1 setInterval() 定时器

2-2 清除setInterval定时器

2-2 案例:倒计时

2-4 案例:点击”发送“按钮后 60s不能再点击

| this

| JS 同步与异步

现在的 JS 支持异步执行了

JS 中的同步任务和异步任务

JS 同步任务、异步任务 的执行机制

JS 异步任务(回调函数)放入任务队列的顺序

| location 对象

1-1 概述

1-2 url 复习

2-1 location 对象的相关属性

2-2 location.href 获取或修改URL

2-3 location.search 获取参数

3-1 location 对象的相关方法

| navigater对象:根据设备不同跳转页面

| history对象:在页面中实现前进页面、后退页面


| Bom概述

  • Bom比Dom的范围更大。Bom包含Dom

  • Bom的标准由不同浏览器厂商自己制定,没有统一标准,因此兼容性有些不确定性

| window 、Bom、Dom 的关系

  • Bom是浏览器对象模型

  • Bom的最高级对象是window

  • Bom的其它对象还有 location navigation history

  • 实际上,document也是一个 window的对象,即它也是Bom(浏览器对象模型)的一部分。但是在Dom(文档对象模型)中,它是最高级别的对象

    即:Bom包含Dom

  • 一切window的对象都可以通过【window.对象】调用 如window.document ,但是也可以省略

  • window是浏览器的顶级祖先对象。相当于Java万物源于Object

  • window下有一个特殊属性name,默认打印出来是空的。建议命名的时候不要用name


alert() 等价于 window.alert()


| window的load事件:把JS写进head里

如何把 JS 代码写到head里(页面加载事件 onload)

window.onload = function(){}
或者监听事件:
window.addEventListener("load",function(){});

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

  • 有了 window.onload 就可以把 JS 代码写到页面元素的上方,因为 onload 是等页面内容全部加载完毕, 再去执行处理函数

  • window.onload 传统注册事件方式 只能写一次,如果有多个,会以最后一个 window.onload 为准。 如果使用 addEventListener 则没有限制

代码示例



Document




比onload更高效的加载事件 DOMContentLoaded

  • onload会等页面所有的元素加载完,才会执行onload内的JS函数

  • DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等(IE9+才支持)

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

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

| window的resize事件(窗口大小改变的时候触发)

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

  • 只要窗口大小发生像素变化,就会触发这个事件。

  • 在没有CSS3之前,我们经常利用这个事件完成响应式布局。搭配 window.innerWidth 获取当前屏幕尺寸

window.onresize = function(){}
或者监听事件:
window.addEventListener("resize",function(){});

| 定时器

1-1 setTimeout() 定时器

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

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

  • window 可以省略

  • 延迟的毫秒数省略默认是 0,如果写,必须是毫秒

  • 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符。

代码示例



Document



1-2 回调函数的概念


1-3 清除setTimeOut定时器

  • 应用场景:肥皂剧中,女主被捆绑了炸弹,然后男主奋不顾身让炸弹停止。

  • 语法

window.clearTimeout(定时器的名字变量)


2-1 setInterval() 定时器

  • setTimeout( ) 至始至终只会执行一次!(亲测,即使放进while循环也不会在每次循环的时候重新执行)

  • setInterval 和 setInterval 的使用方法完全相同,不同之处在于 setInterval( ) 定时器会间隔某个时间段一直反复执行


2-2 清除setInterval定时器

window.clearInterval(interval定时器的变量名);


2-2 案例:倒计时


Document
123

2-4 案例:点击”发送“按钮后 60s不能再点击


Document
手机号码:  

| this

  • 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)

  • 方法调用中谁调用this指向谁

  • 构造函数中this指向构造函数的实例

易错示例:

代码示例:



Document



| JS 同步与异步

现在的 JS 支持异步执行了


现在的 JS引入了”执行栈、回调函数“ 相关标准和技术,使得可以把需要等待执行的代码(回调函数)添加到任务队列中,把事件给那些不需要等待的代码。从而实现异步

包括今后的Ajax,就是一个异步回调函数!

代码示例



Document



JS 中的同步任务和异步任务

  • JS 为了实现异步,添加了”执行栈、回调函数“等概念,从而帮助我们把那些需要等待的任务放到栈中,稍后再执行。

  • 我们需要弄懂,哪些是同步任务(按照顺序依次执行)、哪些是异步任务(放入执行栈中,等待回调的代码)

常见的异步任务

普通事件 click resize

资源加载 load error

定时器 setInterval setTimeOut


JS 同步任务、异步任务 的执行机制

  • 先区分同步任务和异步任务。

  • 同步任务先放到执行栈中,先执行完所有同步任务

  • 一旦所有同步任务执行完毕,则系统依次读取任务队列的异步任务,把异步任务进入执行栈,开始执行


JS 异步任务(回调函数)放入任务队列的顺序

  • 有时候,代码中可能有许多异步任务,比如【延时2s执行】的任务可能定义在【延时3s执行】的任务前面,如果我们只按照【异步函数定义的顺序 + 按照顺序将其丢入任务队列】的做法,则会导致任务队列中【延时2s】的任务被【延时3s】的任务所耽误了一秒(因为是【延时3s】的任务先进去的,根据栈的后进先出,则【延时3s】的任务出栈后才轮到【延时2s】的任务出栈)

  • 观察下列代码 输出的结果是【1 4 休眠2s 休眠3s】 这说明,异步任务的任务队列入栈顺序并不是简单的顺序关系

            console.log(1);window.setTimeout(function(){console.log('休眠2s');},2000);window.setTimeout(function(){console.log('休眠3s');},3000);console.log(4);

  • 实际上,异步任务的任务队列入栈顺序,是由异步任务处理来管理的

    对于定时器:只有计时结束了,异步任务处理 才会把该任务 放入任务队列!然后等同步任务全部执行完成后,再从任务队列调用该函数(这也就解释了上述的现象)

    对于点击:只有点击了,异步任务处理 才会把该任务 放入任务队列!

  • 实际上,系统会在【同步任务执行 → 查看任务队列是否有任务 → 从任务队列获得任务并执行】 【异步任务处理 → 添加异步任务到任务队列】两条任务线上不断循环,这种机制被称为事件循环(event loop)

| location 对象

1-1 概述

  • location是隶属于window下的一个对象,其地位和document相当

  • 区别在于:document 是 Dom(文档对象模型)的 ; location 是 Bom(浏览器对象模型)的。

  • location 与 url 有关,location这个Bom对象,是用来对url的相关属性进行操作的

1-2 url 复习


2-1 location 对象的相关属性

注意这是属性!不是函数!不需要括号

location属性的获取方式

window.location.属性名

 当然,也可以省略window

location.属性名

2-2 location.href 获取或修改URL

var url = location.href;  //获取url
location.href = 'url';  //修改当前页面url

2-3 location.search 获取参数

location.search;  //获取的是一个从 ? 开头的字符串

若有中文,则需要进行转码,使用下面这个代码

var parameter = decodeURIComponent(window.location.search);

代码示例:

//登录页代码


Document

manwomen

//跳转页代码


Document


3-1 location 对象的相关方法

方法是要加括号的哦,注意和属性区别开


| navigater对象:根据设备不同跳转页面

navigator 对象包含有关浏览器的信息,它有很多属性,我们最常用的是 userAgent,该属性可以返回由客 户机发送服务器的 user-agent 头部的值。

下面前端代码可以判断用户那个终端打开页面,实现跳转

if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|
Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS
|Symbian|Windows Phone)/i))) {window.location.href = ""; //手机
} else {window.location.href = ""; //电脑
}


| history对象:在页面中实现前进页面、后退页面

代码示例:



Document

当前页面:2

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...