JavaScript:浏览器对象模型BOM

BOM介绍

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

BOM由一系列相关的对象构成,并且每个对象都提供了很多方法和属性。

BOMDOM区别

DOM是文档对象模型,把文档当做对象来看待,它的顶级对象是document,我们主要学习的是操作页面元素。DOM是W3C标准规范。

BOM是浏览器对象模型,是把浏览器当做一个对象来看待,它的顶级对象是window,我们主要学习的是浏览器窗口交互的一些对象。BOM是浏览器厂商在各自浏览器上定义的,兼容性较差

 

window对象

  1. window 对象是一个全局对象,也可以说是 JavaScript 中的顶级对象
  2. 像 document、alert()、console.log()这些都是 window 的属性,基本 BOM 的属性和方法都是 window 的
  3. 所有通过 var 定义在全局作用域中的变量、函数都会变成 window 对象的属性和方法
  4. window 对象下的属性和方法调用的时候可以省略 window      

window对象常见事件 

窗口加载事件        

  1. window.onload   

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

 onload 页面加载事件有两种注册方式:

//方式1

 window.οnlοad=function(){}

//方式2

 window. addEventListener(‘load’,function(){})                                  

演示案例:

<body><input type="button" name="" id="" value="按钮"><script>window.addEventListener('load', function() {// 当页面加载完成后执行的代码alert('kiss me');var btn = document.querySelector('input');btn.addEventListener('click', function() {alert('hug me');});});</script></body>

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

  1. document.DOMContentLoaded 

DOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。le9以上才支持

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

load 等页面内容全部加载完毕,包含页面dom元素,图片,f1ash, css等等

DOMContentLoaded是DOM加载完毕,不包含图片falsh css 等就可以执行,加载速度比load更快一些

<body><input type="button" value="按钮"><script>window.addEventListener('load',function(){var btn=document.querySelector('input')btn.addEventListener('click',function(){alert('hug me')})})window.addEventListener('load',function(){alert('kiss me')})document.addEventListener('DOMContentLoaded',function(){alert('lalala')})//1oad 等页面内容全部加载完毕,包含页面dom元素图片f1ash css等//DoMcontentLoaded是DOM加载完毕,不包含图片falshcss等就可以执行加载速度比1oad更快一些</script></body>                                                                          

调整窗口大小事件

当调整window窗口大小时,就会触发window.onload事件,调用 事件处理函数,该事件有两种注册方式:

 //方式1

 window.οnresize=function(){}

//方式2

Window.addEventListener(‘resize’,function(){})  

利用页面加载事件和调整窗口大小事件,完成响应式布局,示例代码如下:

<style>div{width: 200px;height: 100px;background-color: pink;}</style></head><body><div></div><script>window.addEventListener('load',function(){var div=document.querySelector('div')window.addEventListener('resize',function(){if(window.innerWidth<=800){div.style.display='none'}else{div.style.display='block'}})})</script></body

定时器

定时器方法

在JavaScript中,提供了两组方法用于定时器的实现,具体方法如下:

定时器方法:

方法

说明

setTimeout()

在指定的毫秒数后调用函数或执行一段代码

setInterval()

按指定的周期(以毫秒计)来调用函数或执行一段代码

clearTimeout()

取消由setTimeout()方法设置的定时器

clearInterval()

取消由setInterval()设置的定时器

在实际开发中,我们可以使用setTimeout()方法实现函数的一次调用,并且可以通过clearTimeout()清除定时器

location对象

location对象比较特别,它既是window对象的属性,同时也而是document对象的属性,window.location等同于document.location,它们是引用了同一个对象。Location对象不仅提供了与当前显示文档相关的信息,而且还提供了用户获取和设置窗体的URL。

location URL的示例:

 示例1:

protocol://host[:port]/path/[?query]#fragment

示例2:

http://www.example.com:80/web/index.html?a=3&b=4#res 

location URL的组成

各部分

说明

protocol

网络协议,常用的如http、ftp、mailto等

host

服务器的主机名,如www.example.com

port

端口号,可选,省略时使用协议的默认端口,如http默认端口为80

path

路径,如“/web/index.html”

query

参数,为键值对的形式,通过“&”符号分割,如“a=3&b=4”

fragment

锚点,如“#res”,表示页面内的锚点

案例:获取URL参数

  1. 创建login.html登录页面,搭建表格结构,示例代码如下:
<body><form action="index.html">用户名:<input type="text" name="uname"><input type="submit" value="登录"></form></body>

上述代码中用action属性把表单提交到index.html页面

Index.html代码示例如下:

<body>  <div></div><script>console.log(location.search)var params=location.search.substr(1)console.log(params)var arr=params.split('=')console.log(arr)var div=document.querySelector('div')div.innerHTML=arr[1]+'欢迎您'</script></body>

location 的常用方法

方法

说明

assign()

载入一个新文档

reload()

重新加载当前文档

replace()

用新的文档替换当前文档,覆盖浏览器当前文档

location.assign() 可以立即打开一个新的浏览器位置,并生成一条新的历史记录,接受的参数为URL地址

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

replace()方法的作用是使浏览器的位置发生改变,并且禁止在浏览器历史记录中生成新的记录,它只接受一个要导航到的URL参数,而且在调用replace()方法后,用户不能返回到前一个页面

示例代码:

<body><input type="button" value="按钮1" class="one"><input type="button" value="按钮2" class="two"><input type="button" value="按钮3" class="three"><script>const btn1=document.querySelector('.one')const btn2=document.querySelector('.two')const btn3=document.querySelector('.three')btn1.addEventListener('click',()=>{location.assign("https://blog.csdn.net/")})btn2.addEventListener('click',()=>{location.reload()})btn3.addEventListener('click',()=>{location.replace('https://www.baidu.com/')})</script></body>

navigator 对象

navigator 是对象,该对象下记录了浏览器自身的相关信息

常用属性和方法:

• 通过 userAgent 检测浏览器的版本及平台

// 检测 userAgent(浏览器信息)(function () {const userAgent = navigator.userAgent// 验证是否为 Android 或 iPhoneconst android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)// 如果是 Android 或 iPhone,则跳转至移动站点if (android || iphone) {location.href = 'http://m.itcast.cn'}})();

histroy 对象

history (历史)是对象,主要管理历史记录, 该对象与浏览器地址栏的操作相对应,如前进、后退等

使用场景

history 对象一般在实际开发中比较少用,但是会在一些 OA 办公系统中见到。

history对象的属性和方法

分类

名称

说明

属性

length

返回历史列表中的网址数

方法

back()

加载history列表中的前一个URL

forward()

加载history列表中的下一个URL

go()

加载history列表中的某一个具体页面

<body><button class="back">←后退</button><button class="forward">前进→</button><script>// histroy 对象// 1.前进const forward = document.querySelector('.forward')forward.addEventListener('click', function () {// history.forward()history.go(1)})// 2.后退const back = document.querySelector('.back')back.addEventListener('click', function () {// history.back()history.go(-1)})</script>

本地存储(今日重点)

本地存储:将数据存储在本地浏览器中

常见的使用场景:

https://todomvc.com/examples/vanilla-es6/ 页面刷新数据不丢失

好处:

1、页面刷新或者关闭不丢失数据,实现数据持久化

2、容量较大,sessionStorage 和 localStorage 约 5M 左右

localStorage(重点)

作用: 数据可以长期保留在本地浏览器中,刷新页面和关闭页面,数据也不会丢失

特性:以键值对的形式存储,并且存储的是字符串, 省略了 window

 

<body><script>// 本地存储 - localstorage 存储的是字符串// 1. 存储localStorage.setItem('age', 18)// 2. 获取console.log(typeof localStorage.getItem('age'))// 3. 删除localStorage.removeItem('age')</script></body>

sessionStorage(了解)

特性:

• 用法跟 localStorage 基本相同

• 区别是:当页面浏览器被关闭时,存储在 sessionStorage 的数据会被清除

存储:sessionStorage.setItem(key,value)

获取:sessionStorage.getItem(key)

删除:sessionStorage.removeItem(key)

localStorage 存储复杂数据类型

问题:本地只能存储字符串,无法存储复杂数据类型.

解决:需要将复杂数据类型转换成 JSON 字符串,在存储到本地

语法:JSON.stringify(复杂数据类型)

JSON 字符串:

• 首先是 1 个字符串

• 属性名使用双引号引起来,不能单引号

• 属性值如果是字符串型也必须双引号

<body><script>// 本地存储复杂数据类型const goods = {name: '小米',price: 1999}// localStorage.setItem('goods', goods)// console.log(localStorage.getItem('goods'))// 1. 把对象转换为 JSON 字符串 JSON.stringifylocalStorage.setItem('goods', JSON.stringify(goods))// console.log(typeof localStorage.getItem('goods'))</script></body>

问题:因为本地存储里面取出来的是字符串,不是对象,无法直接使用

解决: 把取出来的字符串转换为对象

语法:JSON.parse(JSON 字符串)<body>

<script>// 本地存储复杂数据类型const goods = {name: '小米',price: 1999}// localStorage.setItem('goods', goods)// console.log(localStorage.getItem('goods'))// 1. 把对象转换为 JSON 字符串 JSON.stringifylocalStorage.setItem('goods', JSON.stringify(goods))// console.log(typeof localStorage.getItem('goods'))// 2. 把 JSON 字符串转换为对象 JSON.parseconsole.log(JSON.parse(localStorage.getItem('goods')))</script></body

综合案例

数组 map 方法

使用场景:

map 可以遍历数组处理数据,并且返回新的数组

语法:

<body><script>const arr = ['red', 'blue', 'pink']// 1. 数组 map 方法 处理数据并且 返回一个数组const newArr = arr.map(function (ele, index) {// console.log(ele) // 数组元素// console.log(index) // 索引号return ele + '颜色'})console.log(newArr)</script></body>

map 也称为映射。映射是个术语,指两个元素的集之间元素相互“对应”的关系。

map 重点在于有返回值,forEach 没有返回值(undefined)

数组 join 方法

作用:join() 方法用于把数组中的所有元素转换一个字符串

语法:

<body><script>const arr = ['red', 'blue', 'pink']// 1. 数组 map 方法 处理数据并且 返回一个数组const newArr = arr.map(function (ele, index) {// console.log(ele) // 数组元素// console.log(index) // 索引号return ele + '颜色'})console.log(newArr)// 2. 数组 join 方法 把数组转换为字符串// 小括号为空则逗号分割console.log(newArr.join()) // red 颜色,blue 颜色,pink 颜色// 小括号是空字符串,则元素之间没有分隔符console.log(newArr.join('')) //red 颜色 blue 颜色 pink 颜色console.log(newArr.join('|')) //red 颜色|blue 颜色|pink 颜色</script></body

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

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

相关文章

SpringBoot 2.2.10 无法执行Test单元测试

很早之前的项目今天clone现在&#xff0c;想执行一个业务订单的检查&#xff0c;该检查的代码放在test单元测试中&#xff0c;启动也是好好的&#xff0c;当点击对应的方法执行Test的时候就报错 tip&#xff1a;已添加spring-boot-test-starter 所以本身就引入了junit5的库 No…

前后端、网关、协议方面补充

这里写目录标题 前后端接口文档简介前后端视角对于前端对于后端代码注册路由路由处理函数 关于httpGET/POST底层网络关于前端的获取 路由器网关路由器的IP简介公网IP(WAN IP)私网IP(LAN IP)无线网络IP(WIFI IP)查询路由器私网IP路由器公网IP LAN口与WIFI简介基本原理 手动配置电…

英伟达基于Mistral 7B开发新一代Embedding模型——NV-Embed-v2

我们介绍的 NV-Embed-v2 是一种通用嵌入模型&#xff0c;它在大规模文本嵌入基准&#xff08;MTEB 基准&#xff09;&#xff08;截至 2024 年 8 月 30 日&#xff09;的 56 项文本嵌入任务中以 72.31 的高分排名第一。此外&#xff0c;它还在检索子类别中排名第一&#xff08;…

【计算机网络】TCP网络特点2

断开连接 四次挥手 原因 TCP 四次挥手是为了满足 TCP 连接的全双工特性:两个方向都可以自由传输 保证数据传输的完整性&#xff1a;两方都完成了数据发送和接收并且都同意断开连接 可靠地终止连接以及避免数据混淆和错误等需求:每个方向都需要单独确认导致四次挥手过程 这些…

Opengl光照测试

代码 #include "Model.h" #include "shader_m.h" #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" //以上是放在同目录的头文件#include <glad/glad.h> #include <GLFW/glfw3.…

【MySQL】SQL语言

【MySQL】SQL语言 文章目录 【MySQL】SQL语言前言一、SQL的通用语法二、SQL的分类三、SQLDDLDMLDQLDCL 总结 前言 本篇文章将讲到SQL语言&#xff0c;包括SQL的通用语法,SQL的分类,以及SQL语言的DDL,DML,DQL,DCL。 一、SQL的通用语法 在学习具体的SQL语句之前&#xff0c;先来…

.netcore + postgis 保存地图围栏数据

一、数据库字段 字段类型选择(Type) 设置对象类型为&#xff1a;geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下&#xff1a; {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…

T265相机双目鱼眼+imu联合标定(全记录)

最近工作用到t265&#xff0c;记录一遍标定过程 1.安装驱动 首先安装realsense驱动&#xff0c;因为笔者之前使用过d435i&#xff0c;装的librealsense版本为2.55.1&#xff0c;直接使用t265会出现找不到设备的问题&#xff0c;经查阅发现是因为realsense在2.53.1后就不再支持…

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…

Python学习从0到1 day26 第三阶段 Spark ④ 数据输出

半山腰太挤了&#xff0c;你该去山顶看看 —— 24.11.10 一、输出为python对象 1.collect算子 功能: 将RDD各个分区内的数据&#xff0c;统一收集到Driver中&#xff0c;形成一个List对象 语法&#xff1a; rdd.collect() 返回值是一个list列表 示例&#xff1a; from …

【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)

向量(Vector)和矩阵(Matrix)&#xff1a;用于表示数据集&#xff08;Dataset&#xff09;和特征&#xff08;Feature&#xff09;。矩阵运算&#xff1a;加法、乘法和逆矩阵(Inverse Matrix)等&#xff0c;用于计算模型参数。特征值(Eigenvalues)和特征向量(Eigenvectors)&…

java项目-jenkins任务的创建和执行

参考内容: jenkins的安装部署以及全局配置 1.编译任务的general 2.源码管理 3.构建里编译打包然后copy复制jar包到运行服务器的路径 clean install -DskipTests -Pdev 中的-Pdev这个参数用于激活 Maven 项目中的特定构建配置&#xff08;Profile&#xff09; 在 pom.xml 文件…

【数据库取证】快速从服务器镜像文件中获取后台隐藏数据

文章关键词&#xff1a;电子数据取证、数据库取证、电子物证、云取证、手机取证、计算机取证、服务器取证 小编最近做了很多鉴定案件和参加相关电子数据取证比武赛&#xff0c;经常涉及到服务器数据库分析。现在分享一下技术方案&#xff0c;供各位在工作中和取证赛事中取得好成…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined

VUE_PROD_HYDRATION_MISMATCH_DETAILS 未明确定义。您正在运行 Vue 的 esm-bundler 构建&#xff0c;它期望这些编译时功能标志通过捆绑器配置全局注入&#xff0c;以便在生产捆绑包中获得更好的tree-shaking优化。 Vue.js应用程序正在使用ESM&#xff08;ECMAScript模块&#…

git撤销、回退某个commit的修改

文章目录 撤销某个特定的commit方法 1&#xff1a;使用 git revert方法 2&#xff1a;使用 git rebase -i方法 3&#xff1a;使用 git reset 撤销某个特定的commit 如果你要撤销某个很早之前的 commit&#xff0c;比如 7461f745cfd58496554bd672d52efa8b1ccf0b42&#xff0c;可…

Flume和kafka的整合

1、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 在flume的conf文件夹下&#xff0c;有一个flumeconf 文件夹&#xff1a;这个文件夹是自己创建的 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf Flume 1.9用户手册中文版 — 可能是目前翻译最完…

JavaSE常用API-日期(计算两个日期时间差-高考倒计时)

计算两个日期时间差&#xff08;高考倒计时&#xff09; JDK8之前日期、时间 Date SimpleDateFormat Calender JDK8开始日期、时间 LocalDate/LocalTime/LocalDateTime ZoneId/ZoneDateTIme Instant-时间毫秒值 DateTimeFormatter Duration/Period

支持向量机SVM——基于分类问题的监督学习算法

支持向量机&#xff08;SVM&#xff0c;Support Vector Machine&#xff09;是一种常用于分类问题的监督学习算法&#xff0c;其核心思想是通过寻找一个最佳的超平面来将不同类别的数据点分开&#xff0c;从而实现分类。支持向量机广泛应用于模式识别、文本分类、图像识别等任务…

node对接ChatGpt的流式输出的配置

node对接ChatGpt的流式输出的配置 首先看一下效果 将数据用流的方式返回给客户端,这种技术需求在传统的管理项目中不多见,但是在媒体或者有实时消息等功能上就会用到,这个知识点对于前端还是很重要的。 即时你不写服务端,但是服务端如果给你这样的接口,你也得知道怎么去使用联…

SobarQube实现PDF报告导出

文章目录 前言一、插件配置二、使用步骤1.新生成一个Token2.将拷贝的Token加到上文中执行的命令中3.查看报告 三、友情提示总结 前言 这篇博文是承接此文 .Net项目在Windows中使用sonarqube进行代码质量扫描的详细操作配置 描述如何导出PDF报告 众所周知&#xff0c;导出PDF功…