前端架构师之09_JavaScript_BOM

1 什么是 BOM 对象

BOM:Brower Object Model,指的是浏览器对象模型。

BOM 用来操作浏览器窗口及窗口上的控件,实现用户和页面的动态交互。

浏览器对象:浏览器提供的一系列内置对象的统称。

BOM 浏览器对象模型:各内置对象之间按照某种层次组织起来的模型的统称。

window 对象是 BOM 的顶层(核心)对象。其他的对象都是以属性的方式添加到 window 对象下,也可称为 window 的子对象。

  • document(文档对象):
  • history(历史对象):主要用于记录浏览器的访问历史记录,也就是浏览网页的前进与后退功能。
  • location(地址栏对象):用于获取当前浏览器中URL地址栏内的相关数据。
  • navigator(浏览器对象):用于获取浏览器的相关数据,例如浏览器的名称、版本等,也称为浏览器的嗅探器。
  • screen(屏幕对象):可获取与屏幕相关的数据,例如屏幕的分辨率等。

BOM 没有一个明确的规范,所以浏览器提供商会按照各自的想法随意去扩展 BOM。而各浏览器间共有的对象就成为了事实上的标准。不过在利用 BOM 实现具体功能时要根据实际的开发情况考虑浏览器之间的兼容问题,否则会出现不可预料的情况。

2 window 对象

2.1 全局作用域

window 对象是BOM中所有对象的核心,同时也是BOM中所有对象的父对象。

定义在全局作用域中的变量、函数以及 JavaScript 中的内置函数都可以被 window 对象调用。

var area = 'Beijing';
function getArea(){return this.area;
}
console.log(area);
console.log(window.area);
console.log(getArea());
console.log(window.getArea());
console.log(window.Number(area));
  • 定义在全局作用域中的 getArea() 函数,函数体内的 this 关键字指向 window 对象。
  • 对于 window对象的属性和方法在调用时可以省略 window,直接访问其属性和方法即可。

在 JavaScript 中直接使用一个未声明的变量会报语法错误,但是使用“window.变量名”的方式则不会报错,而是获得一个 undefined 结果。

除此之外,delete 关键字仅能删除 window 对象自身的属性,对于定义在全局作用域下的变量不起作用。

2.2 弹出对话框和窗口

window 对象中除了前面提过的 alert() 和 prompt() 方法外,还提供了很多弹出对话框和窗口的方法,以及相关的操作属性。

分类名称说明
属性closed返回一个布尔值,该值声明了窗口是否已经关闭
属性name设置或返回存放窗口名称的一个字符串
属性opener返回对创建该窗口的window对象的引用
属性parent返回当前窗口的父窗口
属性self对当前窗口的引用,等价于window属性
属性top返回最顶层的父窗口
方法alert()显示带有一段消息和一个确认按钮的警告框
方法confirm()显示带有一段消息以及确认按钮和取消按钮的对话框
方法prompt()显示可提示用户输入的对话框
方法open()打开一个新的浏览器窗口或查找一个已命名的窗口
方法close()关闭浏览器窗口
方法focus()把键盘焦点给予一个窗口
方法print()打印当前窗口的内容
方法scrollBy()按照指定的像素值来滚动内容
方法scrollTo()把内容滚动到指定的坐标

所有的属性和方法在常见的浏览器(如IE、Chrome等)中全部支持。

prompt() 方法

作用:用于生成用户输入的对话框。

第1个参数:用于设置用户输入的提示信息。

第2个参数:用于设置输入框中的默认信息。

prompt('请输入测试的选项');
prompt('请输入测试的选项', '用户名和密码');
confirm() 方法

作用:弹出一个确认对话框,该对话框中包含提示消息以及确认和取消按钮。

参数:用于设置确认的提示信息。

返回值:点击“确定”按钮,返回true。点击“取消”按钮,返回false。

confirm('确定要删除吗?')
open() 方法

作用:用于打开一个新的浏览器窗口,或查找一个已命名的窗口。

语法:open(URL, name, specs, replace)。

  • 第1个参数:打开指定页面的URL地址,若没有指定,则打开一个新的空白窗口。
  • 第2个参数:指定target属性或窗口的名称
  • 第3个参数:用于设置浏览器窗口的特征(如大小、位置、滚动条等),多个特征之间使用逗号分隔。
  • 第4个参数:设置为true,表示替换浏览历史中的当前条目,设置false(默认值),表示在浏览历史中创建新的条目。
name可选值含义
_blankURL加载到一个新的窗口,也是默认值
_parentURL加载到父框架
_selfURL替换当前页面
_topURL替换任何可加载的框架集
name窗口名称
specs可选参数说明
heightNumber窗口的高度,最小值为100
leftNumber该窗口的左侧位置
locationyes|no|1|0是否显示地址字段,默认值是yes
menubaryes|no|1|0是否显示菜单栏,默认值是yes
resizableyes|no|1|0是否可调整窗口大小,默认值是yes
scrollbarsyes|no|1|0是否显示滚动条,默认值是yes
statusyes|no|1|0是否要添加一个状态栏,默认值是yes
titlebaryes|no|1|0是否显示标题栏.被忽略,除非调用HTML应用程序或一个值得信赖的对话框,默认值是yes
toolbaryes|no|1|0是否显示浏览器工具栏,默认值是yes
widthNumber窗口的宽度,最小值为100

与 open() 方法功能相反的是 close() 方法,用于关闭浏览器窗口,调用该方法的对象就是需要关闭的窗口对象。

2.3 窗口位置和大小

BOM 中用来获取或更改 window 窗口位置,窗口高度与宽度,文档区域高度与宽度的相关属性和方法有很多。

分类名称说明
属性screenLeft返回相对于屏幕窗口的x坐标(Firefox不支持)
属性screenTop返回相对于屏幕窗口的y坐标(Firefox不支持)
属性screenX返回相对于屏幕窗口的x坐标(IE8不支持)
属性screenY返回相对于屏幕窗口的y坐标(IE8不支持)
属性innerHeight返回窗口的文档显示区的高度(IE8不支持)
属性innerWidth返回窗口的文档显示区的宽度(IE8不支持)
属性outerHeight返回窗口的外部高度,包含工具条与滚动条(IE8不支持)
属性outerWidth返回窗口的外部宽度,包含工具条与滚动条(IE8不支持)
方法moveBy()将窗口移动到相对的位置
方法moveTo()将窗口移动到指定的位置
方法resizeBy()将窗口大小调整到相对的宽度和高度
方法resizeTo()将窗口大小调整到指定的宽度和高度

目前只有 window.open() 方法打开的的窗口和选项卡(Tab),FireFox和Chrome浏览器才支持口位置和大小的调整。

2.4 框架操作

window 对象提供的 frames 属性可通过集合的方式,获取 HTML 页面中所有的框架,length 属性就可以获取当前窗口中 frames 的数量。

<body><!-- 设置框架 --><iframe name="frame01"></iframe><iframe name="frame02"></iframe><iframe name="frame03"></iframe>
</body>
<script>// 获取窗口对应给定对象的内容// 方式1:window.frames['frame01'].document.write('frame01 text.');// 方式2:window.frames.frame02.document.write('frame02 text.');// 方式3:window.frames[2].document.write('frame03 text.');
</script>

除此之外,还可以利用 parent 获取当前 window 对象所在的父窗口。

window.parent;         // 如果在框架中,获取父级窗口,否则返回自身引用
window.parent.frames;  // 获取同级别的框架

2.5 定时器

JavaScript 中可通过 window 对象提供的方法实现在指定时间后执行特定操作,也可以让程序代码每隔一段时间执行一次,实现间歇操作。

方法说明
setTimeout()在指定的毫秒数后调用函数或执行一段代码
setInterval()按照指定的周期(以毫秒计)来调用函数或执行一段代码
clearTimeout()取消由setTimeout()方法设置的定时器
clearInterval()取消由setInterval()设置的定时器

setTimeout() 和 setInterval() 方法区别:

  • 相同点:都可以在一个固定时间段内执行 JavaScript 程序代码。
  • 不同点:setTimeout() 只执行一次代码,setInterval() 会在指定的时间后,自动重复执行代码。
// 只执行一次代码
setTimeout(echoStr, 3000);
function echoStr() {console.log('JavaScript');
}
// 重复执行代码
setInterval(echoStr, 3000);
function echoStr() {console.log('JavaScript');
}
  • setTimeout() 方法在执行一次后即停止了操作;setInterval() 方法一旦开始执行,在不加干涉的情况下,间歇调用将会一直执行到页面关闭为止。
  • 若要在定时器启动后,取消该操作,可以将 setTimeout() 的返回值(定时器ID)传递给 clearTimeout() 方法;或将 setInterval() 的返回值传递给 clearInterval() 方法。

2.6 练习作业

  • 限时秒杀
    • 指定限时秒杀的结束时间,及其对应的毫秒数。
    • 获取当前时间的毫秒数。
    • 计算当前与秒杀结束的时间差,大于0,计算剩余的天时分秒;否则结束秒杀。
    • 利用定时器完成秒杀的倒计时功能。
    • 利用两位数字显示秒杀的时间。

3 location 对象

3.1 更改 URL

URL:Uniform Resource Locator,统一资源定位符。

在 Internet 上访问的每一个网页文件,都有一个访问标记符,用于唯一标识它的访问位置,以便浏览器可以访问到,这个访问标记符称为URL。

// http://www.example.com:80/web/index.html?a=3&b=4#res
// http 传输数据所使用的协议
// www.example.com 服务器主机名
// 80 端口号
// /web/index.html 要请求的资源
// a=3&b=4 用户传递的参数
// #res 页面内部的锚点// 由于80是Web服务器的默认端口号,因此可以省略URL中的“:80”
// 即:http://www.example.com/web/index.html?a=3&b=4#res

location 对象提供的用于改变 URL 地址的方法,所有主流的浏览器都支持。

名称说明
assign()载入一个新的文档
reload()重新载入当前文档
replace()用新的文档替换当前文档

reload() 方法的唯一参数,是一个布尔类型值,将其设置为 true 时,它会绕过缓存,从服务器上重新下载该文档,类似于浏览器中的刷新页面按钮。

3.2 获取 URL 参数

Web开发中,经常通过URL地址传递的参数执行指定的操作,如商品的搜索,排序等。此时,可以利用location对象提供的search属性返回URL地址中的参数。

  • 用户访问该URL地址。
  • 获取带有?的请求参数。

获取URL的指定部分:location.属性名。

设置URL的指定部分:location.属性名 = 值。

属性说明
hash返回一个URL的锚部分
host返回一个URL的主机名和端口
hostname返回URL的主机名
href返回完整的URL
pathname返回URL的路径名
port返回一个URL服务器使用的端口号
protocol返回一个URL协议

3.3 练习作业

  • 定时跳转
    • 编写定时跳转的HTML页面。
    • 获取指定的秒数,并减1写入页面。
    • 当秒数大于0时,利用 setTimeout() 循环倒计时。
    • 当秒数小于等于0时,利用 location.href 跳转到指定的URL地址中。

4 history 对象

4.1 历史记录跳转

history对象可对用户在浏览器中访问过的URL历史记录进行操作。

出于安全方面的考虑,history对象不能直接获取用户浏览过的URL,但可以控制浏览器实现“后退”和“前进”的功能。

分类名称说明
属性length返回历史列表中的网址数
方法back()加载history列表中的前一个URL
方法forward()加载history列表中的下一个URL
方法go()加载history列表中的某个具体页面
  • go()方法可根据参数的不同设置,完成历史记录的任意跳转。当参数值是一个负整数时,表示“后退”指定的页数;当参数值是一个正整数时,表示“前进”指定的页数。
  • 当go()方法的参数为1或-1时,与forward()和back()方法的作用相同。

4.2 无刷新更改 URL 地址

HTML5为history对象引入了history.pushState()和history.replaceState()方法,用来在浏览历史中添加和修改记录,实现无刷新更改URL地址。

pushState(state, title, [url])     // 添加历史记录
replaceState(state, title, [url])  // 修改历史记录
  • 参数state:表示一个与指定网址相关的状态对象,此处可以填null或空字符串。
  • 参数title:表示新页面的标题,可以填null或空字符串。
  • 参数url:表示新的网址,并且必须与当前页面处在同一个域中。
history.pushState(null, null, "?a=check");
history.pushState(null, null, "?a=login");
history.replaceState(null, null, "?p=1");
  • pushState()方法会改变浏览器的历史列表中记录的数量。
  • replaceState()方法仅用于修改历史记录,历史记录列表的数量不变,与location.replace()方法的功能类似。

5 navigator 对象

navigator对象提供了有关浏览器的信息,主流浏览器中存在的属性和方法如下。

分类名称说明
属性appCodeName返回浏览器的内部名称
属性appName返回浏览器的名称
属性appVersion返回浏览器的平台和版本信息
属性cookieEnabled返回指明浏览器中是否启用cookie的布尔值
属性platform返回运行浏览器的操作系统平台
属性userAgent返回由客户端发送服务器的User-Agent头部的值
方法javaEnabled()指定是否在浏览器中启用Java

6 screen 对象

screen对象用于返回当前渲染窗口中与屏幕相关的属性信息,如屏幕的宽度和高度等。以下展示主流浏览器中支持的screen属性。

名称说明
height返回整个屏幕的高
width返回整个屏幕的宽
availHeight返回浏览器窗口在屏幕上可占用的垂直空间
availWidth返回浏览器窗口在屏幕上可占用的水平空间
colorDepth返回屏幕的颜色深度
pixelDepth返回屏幕的位深度/色彩深度

7 练习作业

  • 红绿灯倒计时
    • 横向三色交通信号灯的亮灯的顺序一般为“绿->黄->红->绿”依次循环。
    • 亮灯时长需根据路口的实际情况等因素来考虑设置,如红灯亮设置为30秒,绿灯亮设置为35秒,黄灯亮设置为5秒。
    • 编写HTML,设置红黄绿灯及倒计时的显示页面。
    • 创建红、黄、绿灯对象lamp,保存相关的数据。
    • 创建倒计时的元素对象count,实现倒计时的时间设置。
    • 根据lamp和count对象获取并设置绿灯亮时页面初始化效果。
    • 利用setInterval()函数完成信号灯倒计时的动态改变效果。
      水平空间 |
      | colorDepth | 返回屏幕的颜色深度 |
      | pixelDepth | 返回屏幕的位深度/色彩深度 |

7 练习作业

  • 红绿灯倒计时
    • 横向三色交通信号灯的亮灯的顺序一般为“绿->黄->红->绿”依次循环。
    • 亮灯时长需根据路口的实际情况等因素来考虑设置,如红灯亮设置为30秒,绿灯亮设置为35秒,黄灯亮设置为5秒。
    • 编写HTML,设置红黄绿灯及倒计时的显示页面。
    • 创建红、黄、绿灯对象lamp,保存相关的数据。
    • 创建倒计时的元素对象count,实现倒计时的时间设置。
    • 根据lamp和count对象获取并设置绿灯亮时页面初始化效果。
    • 利用setInterval()函数完成信号灯倒计时的动态改变效果。

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

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

相关文章

Redis原理(一):Redis数据结构(上)

文章目录 1、 Redis数据结构-动态字符串2、 Redis数据结构-intset3、 Redis数据结构-Dict4、 Redis数据结构-ZipList5、 Redis数据结构-ZipList的连锁更新问题6、 Redis数据结构-QuickList1、 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串,value往往是字符串…

MongoDB(二)基础操作 创建、删除,查询等

mongodb有一个特点&#xff0c;如果某个库&#xff0c;库下面没数据&#xff08;mongodb成集合&#xff09;&#xff0c;该库等于不存在的 mongodb只要创建一个库&#xff0c;在库下写入数据&#xff0c;该库才会生成 mongoshe [-hhost -pxxx] 创建数据库 use 数据库名 # 如果…

Android - Monkey 测试应用出现Crash报错IllegalStateException

问题描述 平时使用Lottie动画都是正常的&#xff0c;没出过这个crash问题&#xff0c;看下的报错信息&#xff0c;代码中文件夹也设置了&#xff0c;没看出来问题。 AndroidRuntime: java.lang.IllegalStateException: You must set an images folder before loading an imag…

c语言常见字符函数、内存函数(详讲)

前言&#xff1a; 其实在c语言当中是没有字符串这一概念的&#xff0c;不像c里面有string类型用来存放字符串。在c语言中我们只能把字符串放在字符串常量以及字符数组中。 1.常见字符串函数 1.1strlen size_t strlen ( const char * str );作用&#xff1a;用来求字符串中 …

C语言 L1-016 查验身份证

L1-016 查验身份证 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下&#xff1a; 首先对前17位数字加权求和&#xff0c;权重分配为&#xff1a;{7&#xff0c;9&#xff0c;10&#xff0c;5&#xff0c;8&#xff0c;4&#xff0c…

【MySQL】基础实战篇(1)—数据库与数据表的操作

创建管理数据库创建数据库查看与选择数据库修改数据库删除数据库 创建管理数据表创建数据表查看数据修改数据表删除数据表 创建管理数据库 创建数据库 语法&#xff1a; CREATE DATABASE 数据库名称;注&#xff1a; 在同一个数据库服务器上必须是唯一的&#xff0c;不允许存…

c++模版元编程,基于递归的编程

基于递归的模版元编程允许在模版中进行递归调用&#xff0c;以便在编译时生成更复杂的代码。这种技术的核心思想是将问题分解为一个个较小的子问题&#xff0c;并通过递归地调用模版来处理它们。 模版元编程的基本概念和原理&#xff1a; 模版元编程是一种利用C模版系统在编译时…

人工智能的未来:从 Jetson 到 GPT,沙龙见闻与洞察

前言 在当今数字化时代&#xff0c;人工智能正以惊人的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居到医疗诊断&#xff0c;人工智能技术已经广泛渗透到各个行业&#xff0c;并为其带来了巨大的变革和创新。越来越多的行业专家、学者…

postman发送图片

POSTMAN 如何发送携带图片的请求? 闲话不叙 步骤如下&#xff1a; 新建一个请求&#xff0c;在Headers中添加一对k-v : Content-Type > multipart/form-data 请求的接口: RequestMapping("/fileUploadController")public String fileUpload(MultipartFile fil…

【C++】构造函数和析构函数第一部分(构造函数和析构函数的作用)--- 2023.9.25

目录 前言初始化和清理的概念构造函数和析构函数的作用构造函数的作用析构函数的作用 使用构造函数和析构函数的注意事项默认的构造函数和析构函数结束语 前言 在使用c语言开发的项目场景中&#xff0c;我们往往会遇到申请空间的需求&#xff0c;同时也肯定遇到过程序运行一段…

蓝牙核心规范(V5.4)10.9-BLE 入门笔记之GAP

1.概述 蓝牙核心规范的通用访问配置文件(GAP)部分定义了与设备发现和在两个设备之间建立连接有关的过程。如何执行数据的基本无连接通信、如何使用周期性广播(参见 PADVB-LE Periodic Advertising Broadcast)以及如何设置等时通信(参见 LE BIS和LE CIS - Isochronous Com…

购物车案例

1功能模块分析 请求动态渲染购物车&#xff0c;数据存vuex 数据框控件 修改数据 动态计算总价和总数量 2脚手架新建项目 终端安装axios&#xff1a;npm install axios -g 基于json-server工具&#xff0c;准备后端接口服务环境:&#xff08;模拟后台假数据&#xff09; 1…

积跬步致千里 || 可视化动图展示

可视化动图展示 目前只能在 jupyter notebook 中测试成功 %matplotlib notebook import numpy as np import matplotlib.pyplot as plt import timen 500 data np.random.normal(0,1,n)fig plt.figure() ax fig.add_subplot(111)fig.show() fig.canvas.draw()for i in ra…

互联网摸鱼日报(2023-09-25)

互联网摸鱼日报(2023-09-25) 36氪新闻 WPS AI开放邀请体验&#xff0c;打工人办公的最强福音来了 万亿早餐赛道&#xff0c;谁能笑到最后&#xff1f; 所谓能力问题&#xff0c;80%都是态度问题 本周双碳大事&#xff1a;首批CCER方法学或开放四类项目&#xff1b;隆基绿能…

什么是Redux?它的核心概念有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是Redux&#xff1f;⭐ 它的核心概念有哪些&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发…

C++——模板

目录 泛型编程 函数模板 函数模板概念 函数模板格式 类模板 类模板的定义格式 类模板的实例化 泛型编程 泛型编程是什么呢&#xff1f;泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。型就是类型&#xff0c;不…

【Java】医院智能导诊小程序源码,springboot框架

智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述 “智能导诊”以人工智能手段为依托&#xff0c;为人们提供智能分诊、问病信息等服务&#xff0c;在一定程度上满足了人们自我…

低照度增强算法(图像增强+目标检测+代码)

本文介绍 在增强低光图像时&#xff0c;许多深度学习算法基于Retinex理论。然而&#xff0c;Retinex模型并没有考虑到暗部隐藏的损坏或者由光照过程引入的影响。此外&#xff0c;这些方法通常需要繁琐的多阶段训练流程&#xff0c;并依赖于卷积神经网络&#xff0c;在捕捉长距…

python+vue驾校驾驶理论考试模拟系统

管理员的主要功能有&#xff1a; 1.管理员输入账户登陆后台 2.个人中心&#xff1a;管理员修改密码和账户信息 3.用户管理&#xff1a;管理员可以对用户信息进行添加&#xff0c;修改&#xff0c;删除&#xff0c;查询 4.添加选择题&#xff1a;管理员可以添加选择题目&#xf…

ElementUI首页导航和左侧菜单静态页面的实现,以及Mockjs和总线的介绍

目录 前言 一. Mock.js 1.1 什么是Mock.js 1.2 Mockjs的安装与配置 1.2.1 安装Mock.js 1.2.2 引入Mock.js 1.3 Mockjs的使用 1.3.1 定义数据测试文件 1.3.2 mock拦截ajax请求 二. 首页导航以及左侧菜单的搭建 2.1 什么是总线 2.2 创建三个vue组件 首页AppMain.vue组…