【JS】BOM 详解(工作必备)

news2024/9/25 23:21:57

文章目录

  • BOM
    • 一、History (浏览器记录)
      • 1.1、history.go(指定页)
      • 1.2、history.back(上一页)
      • 1.3、history.forword(下一页)
    • 二、Location(浏览器地址)
      • 2.1、操作属性:
      • 2.2、操作方法:
        • 跳转:location.assign()
        • 刷新:location.reload()
    • 三、Window (操作属性)
      • 3.1、对话框
        • alert(提示框)
        • confirm(询问框)
        • prompt(输入框)
      • 3.2、定时器
        • setTimeout(延时)
        • setInterval(间隔)
      • 3.3、开关窗口
        • open(打开)
        • close(关闭)
    • 四、Window(界面属性)
      • 4.1、窗口与屏幕的位置
        • 距离:screenLeft(左侧)screenTop(顶部)
        • 定位:moveTo(绝对)moveBy(相对)
      • 4.2、窗口与视口的大小
        • 视口:innerHeight(高度)innerWidth(宽度)
        • 窗口:outerHeight(高度)outerWidth(宽度)
      • 4.3、视口与滚动的关系
        • 距离:scrollX(向右)scrllY(向下)
        • 定位:scrollTo(绝对)scrollBy(相对)
    • 五、其他属性(不常用)
      • 5.1、Screen(客户端屏幕)
      • 5.2、Navigator(浏览器信息)

BOM

  • BOM(Browser Object Model):浏览器对象模型
  • 其实就是操作浏览器的一些能力
  • 我们可以操作哪些内容
  1. 获取一些浏览器相关信息(窗口大小)
  2. 操作浏览器的滚动条
  3. 浏览器的信息(浏览器的版本)
  4. 让浏览器出现一个弹出框(alert、confirm、prompt)
  • BOM的核心就是window对象
  • window是浏览器内置的一个对象,里面包含着操作浏览器的方法

一、History (浏览器记录)

  • window 中有一个对象叫做history
  • 是专门用来存储历史记录信息的
  • 在编写时可不使用 window 这个前缀。

1.1、history.go(指定页)

  • go(n):n为正时向前n页,n为负时后退n页
window.history.go(-2); 	// 返回上上页
window.history.go(-1); 	// 返回上一页
window.history.go(0); 	// 刷新当前页
window.history.go(1); 	// 前往下一页

1.2、history.back(上一页)

  • history.back是用来会退历史记录的,就是回到前一个页面,就相当于浏览器上的返回按钮
  • 前提是你要有上一条记录,不然就是一直在这个页面,也不会回退
window.history.back();

1.3、history.forword(下一页)

  • history.forword是到下一个历史记录里面,也就是到下一个页面。
  • 前提是你要之前有过回退操作,不然的话你现在就是最后一个页面,没有下一个
window.history.forward();

二、Location(浏览器地址)

2.1、操作属性:

pathnamesearch属性在HashRouter路由模式下会失效,只能在BrowserRouter路由模式下使用

  • 假设浏览器当前加载的URL是:
  • 常用属性:http://test.csdn.com:3000/#/build_table?id=1
属性说明
location.portocolhttp:页面使用的协议,通常是’http:‘或’https:
location.hostnametest.csdn.com服务器域名
location.port3000请求的端口号
location.hosttest.csdn.com:3000服务器名及端口号
location.originhttp://test.csdn.com:3000url的源地址,只读
location.href完整的url地址等价于window.location
location.pathname/(这里指的是3000后面的/)url中的路径和文件名,不会返回hash和search后面的内容,只有当打开的页面是一个文件时才会生效

  • 特殊属性:(search 指的是端口号后面紧接着的?号,而不是#号后面的?号)
  • location.hash:URL散列值(#号之后的部分,包括#号)
  • location.search:URL的查询字符串(?号后面的部分,包括?号)
- url为:http://test.csdn.com:3000/#/build_table?id=1
console.log(location.hash)		// "#/build_table?id=1"
console.log(location.search )	// ""

- url为:http://test.csdn.com:3000/?id=1#/build_table
console.log(location.hash)		// "#/build_table"
console.log(location.search)	// "?id=1#/build_table"
  • 设置属性,url为:http://test.csdn.com:3000/#/build_table?id=1
location.hash = '#/cerate_table?id=2'
console.log(location.href)	// http://test.csdn.com:3000/#/cerate_table?id=2

location.search= '?/id=2'
console.log(location.href)	// http://test.csdn.com:3000/#/?id=2

  • 其他属性示例: http://foouser:barpassword@www.wrox.com:80/HB/new_file2.html
属性说明
location.usernamefoouser域名前指定的用户名
location.passwordbarpassword域名前指定的密码

2.2、操作方法:

跳转:location.assign()

  • 跳转到百度页面
// 指定协议跳转
location.assign("http://www.baidu.com")
/* 等同于 */ 
location.href = "http://www.baidu.com"

// 以当前页面协议跳转
location.assign("//www.baidu.com")
/* 等同于 */ 
location.href = "//www.baidu.com"

刷新:location.reload()

  • 从新加载当前页面
// 重新加载,可能是从缓存加载
location.reload();
// 重新加载,从服务器加载
location.reload(true)

三、Window (操作属性)

3.1、对话框

alert(提示框)

  • alert()是在浏览器弹出一个提示框
  1. 这个弹出层只是一个提示内容,只有一个确定按钮
  2. 点击这个确定按钮以后,这个提示框就消失了
window.alert("我是一个提示框");

在这里插入图片描述

confirm(询问框)

  • confirm()是在浏览器弹出一个询问框
  1. 这个弹出层有一个询问信息和两个按钮
  2. 当你点击确认的时候,就会得到 true
  3. 当你点击取消的时候,就会得到 false
var boo = window.confirm("我是一个询问框");
console.log(boo);

在这里插入图片描述

prompt(输入框)

  • prompt()是在浏览器弹出一个输入框
  1. 这个弹出层有一个输入框和两个按钮
  2. 但你点击取消的时候,得到的是null
  3. 当你点击确认的时候得到的就是你输入的内容
var str = window.prompt("请输入内容");
console.log(str);

在这里插入图片描述

3.2、定时器

setTimeout(延时)

  • 倒计时多少时间以后执行函数
  • 语法:setTimeout(要执行的函数,多少时间以后执行);
  • 会在你设定的时间以后执行函数
var timerId = setTimeout(function (){
	console.log('我执行了');
},1000);
console.log(timerId) // 1
  1. 时间是按照毫秒进行计算的,1000 毫秒就是 1秒钟
  2. 所以会在页面打开 1 秒钟以后执行函数
  3. 只执行一次,就不在执行了
  4. 返回值是,当前这个定时器是页面中的第几个定时器

关闭定时器:

  • 我们刚才提到过一个 timerId,是表示这个定时器是页面上的第几个定时器
  • 这个 timerId 就是用来关闭定时器的数字
  • 我们有个方法来关闭定时器 clearTimeout
  • 关闭以后定时器就不会在执行了
var timerId = setTimeout(function(){
	console.log("倒计时定时器");
},1000);
clearTimeout(timerId);	// 关闭倒计时定时器
  • 原则上是clearTimeout关闭setTimeout,但是其实是可以通用的
var timeId = setTimeout(function(){
	console.log('倒计时定时器');
},1000);
// 关闭倒计时定时器
clearInterval(timerId);

定时器的返回值

  • 设置定时器的时候,他的返回值是部分 setTimeoutsetInterval
  • 只要有一个定时器,那么就是一个数字
var timerId = setTimeout(function(){
	console.log('倒计时定时器');
},1000);
var timerId2 = setInterval(function(){
	console.log("间隔定时器");
},1000);

console.log(timerId) // 1
console.log(timerId2) // 2

setInterval(间隔)

  • 每隔多少时间执行一次函数
  • 语法:setInterval(要执行的函数,间隔多少时间);
  • 会在你设定的时间以后执行函数
var timerId = setInterval(function (){
	console.log('我执行了');
},1000);
  1. 时间是按照毫秒进行计算的,1000 毫秒就是 1秒钟
  2. 每间隔 1 秒钟执行一次函数
  3. 只要不关闭,会一直执行
  4. 返回值是,当前这个定时器是页面中的第几个定时器

关闭定时器:

  • 我们刚才提到过一个 timerId,是表示这个定时器是页面上的第几个定时器
  • 这个 timerId 就是用来关闭定时器的数字
  • 我们有个方法来关闭定时器 clearInterval
  • 关闭以后定时器就不会在执行了
var timerId2 = setInterval(function(){
	console.log("间隔定时器");
},1000);
cleatInterval(timeId2);	// 关闭间隔定时器
  • 原则上是clearInterval关闭setInterval,但是其实是可以通用的
var timeId2 = setInterval(function(){
	console.log('间隔定时器');
},1000);
// 关闭间隔定时器
clearTimeout(timerId2);

定时器的返回值

  • 设置定时器的时候,他的返回值是部分 setTimeoutsetInterval
  • 只要有一个定时器,那么就是一个数字
var timerId = setTimeout(function(){
	console.log('倒计时定时器');
},1000);
var timerId2 = setInterval(function(){
	console.log("间隔定时器");
},1000);

console.log(timerId) // 1
console.log(timerId2) // 2

3.3、开关窗口

open(打开)

  • 打开一个网址
  • 语法:open("url地址","_black或_self","新窗口的大小")
window.open("https://www.baidu.com/")	// 打开百度

close(关闭)

  • 关闭当前窗口
window.close()	// 关闭

四、Window(界面属性)

  • 窗口:指的是浏览器窗口
  • 视口:指的是浏览器窗口中页面视口(不包含浏览器边框和工具栏)
  • 屏幕:指的是电脑屏幕

4.1、窗口与屏幕的位置

距离:screenLeft(左侧)screenTop(顶部)

  • screenLeft:表示窗口相对于屏幕左侧的位置,返回值的单位是像素值
  • screenTop:表示窗口相对于屏幕顶部的位置,返回值的单位是像素值
console.log("screenLeft 位置:", window.screenLeft);
console.log("screenTop 位置:", window.screenTop);

定位:moveTo(绝对)moveBy(相对)

依浏览器而定,以下方法可能会部分或全部禁用

  • moveTo:接收要移动到的新位置的绝对坐标 x和y
  • moveBy:接收相对当前位置在两个方向上移动的像素值
// 把窗口移动到左上角
window.moveTo(0,0)

// 把窗口移动到坐标位置(200,300)
window.moveTo(200,300)

// 把窗口向下移动100像素
window.moveBy(0,100)

// 把窗口向左移动10像素
window.moveBy(-10,0)

4.2、窗口与视口的大小

视口:innerHeight(高度)innerWidth(宽度)

  • 返回浏览器窗口中页面视口大小(不包含浏览器边框和工具栏)
console.log("innerWidth 宽度:",window.innerWidth);
// innerWidth 宽度: 1002
console.log("innerHeight 高度:",window.innerHeight);
// innerHeight 高度: 907

窗口:outerHeight(高度)outerWidth(宽度)

  • 返回浏览器自身窗口的大小
console.log("outerWidth 宽度:",window.outerWidth);
// outerWidth 宽度: 1680
console.log("outerHeight 高度:",window.outerHeight);
// outerHeight 高度: 1010

浏览器的 onscroll 事件

  • 浏览器内的内容即然可以滚动,那么我们就可以获取到浏览器滚动的距离
  • 思考一个问题?
  1. 浏览器真的滚动了吗?
  2. 其实我们的浏览器是没有滚动的,是一直在那里
  3. 滚动的是什么?是我们的页面
  4. 所以说,其实浏览器没有动,只不过是页面向上走了
  • 所以,这个已经不能单纯的算是浏览器的内容了,而是我们页面的内容
  • 所以不是在用 window 对象了,而是使用 document 对象
  • 这个 onscroll 事件是当浏览器的滚动条滚动的时候触发
  • 或者鼠标滚轮滚动的时候出发
  • 注意:前提是页面的高度要超过浏览器的可视窗口才可以
window.onscroll = function(){
	console.log('浏览器滚动了');
}

4.3、视口与滚动的关系

Safari 浏览器使用的是window.pageXOffsetwindow.pageYOffset

距离:scrollX(向右)scrllY(向下)

  • scrollX:文档向右滚动的距离,当窗口无法展示整个页面,这时候就需要滚动查看。
  • scrollY:文档向下滚动的距离,当窗口无法展示整个页面,这时候就需要滚动查看。
console.log("scrollX 向右滚动了多少距离:",window.scrollX);
// scrollX 向右滚动了多少距离: 0
console.log("scrollY 向下滚动了多少距离:",window.scrollY);
// scrollY 向下滚动了多少距离: 0

定位:scrollTo(绝对)scrollBy(相对)

  • 这两个方法接收x和y坐标,表示要滚动到的位置
// 滚动到页面左上角
window.scrollTo(0,0)

// 滚动到页面左边100像素和顶部200像素的位置
window.scrollTo(100,200)

// 相对于当前视口向下滚动100像素
window.scrollBy(0,100)

// 相对于当前视口向右滚动40像素
window.scrollBy(40,0)

五、其他属性(不常用)

5.1、Screen(客户端屏幕)

属性描述
screen.height获取整个屏幕的高
screen.width获取整个屏幕的宽
screen.availHeight整个屏幕的高减去系统部件的高( 可用的屏幕高度 )
screen.availWidth整个屏幕的宽减去系统部件的宽(可用的屏幕宽度 )

5.2、Navigator(浏览器信息)

  • window 中有一个对象叫做 navigator
  • 是专门用来获取浏览器信息的
  • 在编写时可不使用 window 这个前缀。
属性描述
navigator.userAgent获取浏览器的整体信息
navigator.appName获取浏览器名称
navigator.appVersion获取浏览器的版本号
navigator.platform获取当前计算机的操作系统

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

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

相关文章

基于OpenCV的图片和视频人脸识别

目录 🥩前言 🍖环境使用 🍖模块使用 🍖模块介绍 🍖模块安装问题: 🥩人脸检测 🍖Haar 级联的概念 🍖获取 Haar 级联数据 🍗 1.下载所需版本 🍗 2.安…

前后端不分离项目如何使用elementUI

首先,去官网下载element 的js和css和字体等文件 其次,分别将js和css 引入到项目 然后就可以使用了,使用方法和vue中使用element方法一致、

5款最新最实用的小软件,让你的工作和生活更轻松

我喜欢发现和分享一些好用的软件,我觉得它们可以让我们的工作和生活更加轻松和快乐。今天给大家介绍五款我最近发现的软件, GIF录制工具——Screen To Gif Screen To Gif是一款完全免费的GIF录制神器,可以让你轻松地录制屏幕、摄像头或画板…

学生信息管理案例

效果图: 业务模块: 点击录入按钮可以录入数据点击删除可以删除当前的数据 注意:本次案例,我们尽量减少dom操作,采用操作数据的形式。增加和删除都是针对数组的操作,然后根据数组数据渲染页面 核心思路:…

5款办公神器软件推荐:提高效率,享受分享

给大家分享一些优秀的软件工具,是一件让人很愉悦的事情,今天继续带来5款优质软件。 图床管理——PicGo PicGo是一款图床管理工具,可以快速上传图片到各种图床,并生成链接。你可以使用PicGo来管理你的图片资源,或者作为Markdown编…

STM32F4_定时器输入捕获详解

目录 1. 输入捕获简介 2. 输入捕获框图 3. 输入捕获模式 4. 相关寄存器 4.1 TIMx_ARR、TIMx_PSC 4.2 捕获/比较寄存器1:TIMx_CCMR1 4.3 捕获/比较使能寄存器 TIMx_CCER 4.4 中断使能寄存器 TIMx_DIER 5. 库函数配置输入捕获高电平脉冲宽度 6. 实验程序 6…

【4.14】今天讲两道TCP面试题

文章目录TCP Keepalive 和HTTP Keep-Alive是一个东西吗?TCP协议有什么缺陷TCP Keepalive 和HTTP Keep-Alive是一个东西吗? 对于这个问题,我们要先知道这两个KeepAlive分别代表什么? TCP的Keepalive是由TCP层(内核层&a…

移远通信率先通过ISO/SAE 21434汽车网络安全管理体系认证

近日,移远通信车载前装BU获得了由国际独立第三方检测、检验和认证机构TV NORD颁发的ISO/SAE 21434汽车网络安全管理体系认证证书。 ISO/SAE 21434标准认证的通过,表明移远通信车载前装BU的网络安全风险管理满足了产品从概念设计、开发、生产、运营到售后…

我的面试八股(数据库)

数据库范式? 数据库范式有三种 1NF 第一范式,属性(对应表中的字段)不能再分割,就是这个字段只能是一个值,不能再分为多个其它字段了,1NF是所有关系型数据库的最基本要求。 2NF 第二范式&am…

Spring Security 02 搭建环境

搭建环境 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifa…

第31天-贪心-第八章 ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录1. 买卖股票的最佳时机2. 跳跃游戏3. 跳跃游戏 ||1. 买卖股票的最佳时机 - LeetCode链接 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 …

docker安装jenkins安装流程(一)

1.下载安装jdk 官网&#xff1a;https://jdk.java.net/ https://www.oracle.com/java/technologies/downloads/ 上传到linux服务器 cd /usr mkdir jdk tar -zxvf 所要解压的文件名 编辑profile文件&#xff1a;vim /etc/profile 把光标移到最后一行&#xff0c;键盘按 i&…

技术分享 | 如何优雅的删除 Zabbix 的 history 相关历史大表

作者&#xff1a;徐文梁 爱可生DBA成员&#xff0c;一个执着于技术的数据库工程师&#xff0c;主要负责数据库日常运维工作。擅长MySQL,redis&#xff0c;其他常见数据库也有涉猎&#xff0c;喜欢垂钓&#xff0c;看书&#xff0c;看风景&#xff0c;结交新朋友。 本文来源&…

Vue动图数据表格,根据字段是否为空,控制表格列的隐藏和显示

所在前面的话&#xff0c;我是个前端小白&#xff0c;大佬请绕行&#xff0c;可能大佬觉得很简单&#xff0c;但是我真的花了好几个小时去解决&#xff0c;所以记录一下&#xff0c;下次也可以作为参考。 我主要是以第二种方式进行修改的 开门见山 简述问题&#xff1a;大家…

《这就是软件工程师》- 每位软件工程师值的看的一本书,尤其是刚刚步入IT行业的年轻人

文章目录第一部分&#xff5c;行业地图1、现实&#xff1a;为什么会有996&#xff1f;1&#xff09;行业处于特定的发展阶段2&#xff09;公司组织管理问题2、进阶&#xff1a;软件工程师的四大台阶1&#xff09;新手阶段【执行力】2&#xff09;进阶阶段【设计能力】3&#xf…

电子行业数字化工厂的发展现状如何

随着科技的不断发展&#xff0c;电子行业的生产制造方式也在不断地进步。数字化工厂建设是电子行业中的一个重要发展方向&#xff0c;它可以提高生产效率&#xff0c;降低生产成本&#xff0c;提高产品质量&#xff0c;减少人力资源的使用。本文将从数字化工厂的概念、发展历程…

Zookeeper总结

目录 1、概念 2、什么是Zookeeper 3、如何下载 4、部署运行 4.1、解压文件 4.2、修改配置文件 4.3、创建持久化目录 4.4、配置jdk 4.5、启动zookeeper服务 4.6、查看zookeeper运行状态 5、系统模型 5.1、数据模型&#xff08;文件系统&#xff09; 5.2、znode节点类型 持久…

Google FLASH-QUAD Transformer模型的设计雷点

这个模型用来做无序弱监督分类&#xff0c;效果好&#xff0c;特别是收敛速度比标准多头Attention层快多了&#xff0c;完全没得比。 问题1 但这模型我用来做自回归生成&#xff0c;非常垃圾。 同时尝试了 GPT 和 T5 这两种模型结构的设计&#xff0c;明明Loss正常下降&#…

环境变量相关知识

目录 目录 谢谢你的阅读&#xff0c;这是对我最大的鼓舞 先说结论&#xff1a; 开始论述&#xff1a; 让我们举个例子 相关指令 创建本地变量 创建环境变量 方法一&#xff1a; 方法二&#xff1a; 删除环境变量 子进程中也有环境变量 第一种&#xff1a; 第二种 …

【PlumGPT】与PlumGPT开启智能对话之旅

文章目录 一、前言二、PlumGPT介绍篇三、PlumGPT登录篇四、PlumGPT体验篇1、与PlumGPT聊天2、让PlumGPT翻译3、让PlumGPT创作4、请PlumGPT写推荐信5、让PlumGPT展示图片6、让PlumGPT充当百科小助手 五、PlumGPT总结篇 PlumGPT入口体验链接&#xff1a;https://plumgpt.com 一、…