✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
所属专栏:前端泛海
景天的主页:景天科技苑
文章目录
- BOM对象
- 1.window对象
- 2.定时器
- 3.screen对象
- 4.location对象
- 5.navigator对象
- 6.history 对象
BOM对象
BOM:Browser Object Model,浏览器对象模型,提供一系列与浏览器相关的信息。
浏览器对象模型(Browser Object Model (BOM))
不存在浏览器对象模型(BOM)的官方标准。
现代的浏览器已经(几乎)实现了 JavaScript 交互相同的方法和属性,因此它经常作为 BOM 的方法和属性被提到。
BOM对象:分为window对象和window子对象(screen对象,location对象,navigator对象,history对象)。
1.window对象
window对象是BOM顶层对象。
window对象是JS访问浏览器窗口的一个接口
window对象是一个全局对象,声明的所有的全局变量,全局方法函数最终都是window对象的属性或者方法。
其他window方法:
window.open() :打开一个新的浏览器窗口,接受四个参数(URL/打开方式/窗口参数/是否取代当前页面历史记录的布尔值)。
window.close() :关闭新打开的窗口(仅限open()打开的窗口)。
window.moveTo():移动当前窗口。
window.resizeTo():调整当前窗口的尺寸。
1 //bom称为浏览器对象模型(bowser object model),可以获取浏览器上所有的内容及相关操作
2 //window对象
3 console.log(window);//对象和window的构造函数
4 //常用的弹窗方法及打印方法
5 window.console.log('hello')//window 可以省略
6 console.log('日志');//控制台 log日志 以日志的形式打印
7 //以错误的形式打印
8 console.error('错误');
9 console.warn('警告');
10 //弹窗
11 window.alert('hello')
12 var isTrue=confirm('你确定要删除吗?')//交互框 true确认 false取消 返回
13 console.log(isTrue);
14 var str=prompt('请输入你的手机号')//输入框 返回的是string类型
15 //打开 关闭
16 //第一个参数是url地址,第二个是参数为title标题 target是设置打开方式,第三个参数为设置参数的(窗口的高度 宽度等)
17 window.open('http://www.baidu.com','_blank','width=300,height=100,top=0,left=0')
18 // 移动窗口位置
19 window.moveBy(100,100) //X+100 Y+100 移动位置
20 window.moveTo(200,200) //从当前位置移动
21 //改变对应窗口大小
22 window.resizeBy(200,200)//改变大小
23 window.resizeTo(200,200) //从当前修改大小
24 //print打印方法
25 window.print()
26 window.focus()//聚焦
27 window.blur()//失去焦点
28 //滚动条栏位置改变
29 window.scrollBy(100,100)//在原本位置上面移动
30 window.scrollTo(0,550)//到达位置 回到顶部
/*
### BOM
js BOM对象 : 针对于浏览器的控制 browser object model
js 中最大的对象 window 整个浏览器窗口出现的所有内容行为都是window对象中的成员;
*/
查看window里面的成员
console.log(window)
// 1.弹出警告框
// window.alert('你好') //window 可以省略,没有返回值
alert没有返回值
// 2.确认弹窗,这个弹窗样式取决于浏览器
// var res = window.confirm("确认弹窗")
// console.log(res); // true / false
点确认 返回true,取消返回false
// 3.等待输入弹窗
// var res = window.prompt(“请输入您的银行密码:”)
// console.log(res);
输入数据点确认后,结果返回,返回的是string类型
// 4.关闭浏览器窗口,直接关闭当前页面的浏览器
// window.close();
window对象的方法都可以不加window,因为window是最顶级的
// innerHeight innerWidth 获取浏览器窗口内部的宽和高
console.log(`浏览器窗口内部的宽度${window.innerWidth}`)
console.log(`浏览器窗口内部的高度${window.innerHeight}`)
获取的是如下框柱,显示出来的窗口大小
window.open() 第一个参数是url地址,第二个是参数为title标题 target是设置打开方式,第三个参数为设置参数的(窗口的高度 宽度等)
默认是在当前页面打开新窗口
// window.open("http://www.baidu.com","_self"); // 在当前页面跳转
// window.open("http://www.baidu.com","_blank","width=500,height=500"); // 在新窗口页面跳转,参数之间加逗号
// var声明的变量在全局直接声明出来的. 自动进window
// 不在函数中, 用var声明的变量自动进window
// var alex = "alexis not a ssb is dsb"; // 全局变量 -> 进入window中
// (function(){
// // // 局部变量和python是一样的
// // let hahahahaha = "alex";
// // // 全局?
// // window.hahahahaha = hahahahaha;
// // 省略了window
// // hahahahaha = "呵呵"; // 向window中存放数据
// // var hehe = "alex"; //函数内部使用var声明的变量,在函数外也不能使用
// console.log(window.alex); // A ok B 報錯
// })();
// var 呵呵呵 = "我的天哪"; // 全局, 进window
//
// console.log(window.呵呵呵);
//
// window中的内容进行使用的时候, 可以省略window
// console.log(hehe); //能A 不能B
// window -> 窗口
// 跳转连接
// setTimeout(function(){
// // 自动跳转到某一个url地址
// // 在js里可以调整当前url的地址
// window.location.href="http://www.baidu.com?t="+new Date().getTime();
// }, 10);
2.定时器
定时器种类(两种):基于单线程的异步并发程序; 返回id号
window.setInterval(函数名,间隔时间(毫秒)) // 定时执行多次任务
window.setTimeout(函数名,间隔时间(毫秒)) // 定时执行一次任务
终止任务
window.clearInterval(id号) // 清除定时器 setInterval
window.clearTimeout(id号) // 清除定时器 setTimeout
var num = 1
function func(){
console.log(`我执行了${num}`);
num++;
}
var id1 = window.setInterval(func,1000);
var id2 = window.setTimeout(func,2000);
console.log(id1,"id1")
console.log(id2,"id2")
console.log("我执行完了....")
window.clearInterval(id1)
定时执行多次任务,设置每秒执行一次
由下 执行完了,却还在执行 可知是异步执行
setTimeOut 只执行一次,第二个参数意思是等待多久执行,单位是毫秒
时钟—年月日时分秒
关于浏览器上看到的url的时间戳,是由于浏览器对于本次访问会生成缓存到浏览器本地
而有些url,本身开发者不希望下次请求时看到的是浏览器缓存,比如实时查看订单的url,用户需要每次拿到最新数据
前端工程师,就在每次请求的url时加个时间戳。这样每次请求的url都是新的。不会由于url一致看到原来的缓存。而是新的请求,能拿到最新数据
web页面时钟展示源码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>时钟</title>
<style>
#clock
{
width:500px;
height:50px;
border:solid 1px red;
border-radius: 25px;
text-align: center;
line-height: 50px;
background-color:bisque;
color:red;
position:absolute;
left: 30%;
top: 30%;
}
</style>
</head>
<body>
<div id = "clock"></div>
<script>
// 获取文档节点对象,通过class获取的是设为相同class的元素的数组,id获取的是单个元素,因为id不能重复
var obj = document.getElementById("clock");
// console.log(obj) //打印的是上面id为 clock的 div
function myclock(){
var d = new Date()
// console.log(d)
// 获取年份
var year = d.getFullYear()
// 获取月份,月份范围 0 ~ 11 0代表1月份
var month = d.getMonth()
// 获取天数
var day = d.getDate()
// 获取小时
var hour = d.getHours()
// 获取分钟
var minute = d.getMinutes()
// 获取秒数
var sec = d.getSeconds()
strvar = `现在时间是:${year}-${month+1}-${day} ${hour}:${minute}:${sec}`
// 将字符串插入obj节点对象
obj.innerHTML=strvar
// 清除定时器的效果
// if(minute == 51){
// clearInterval(id);
// }
}
var id = window.setInterval(myclock,1000)
</script>
</body>
</html>
// 重点.时间戳
//http://www.baidu.com/s?t=1651231231
// 在编程的世界里. 可以用一个数字来描述时间点
// 从1970-01-01 00:00:00开始. 每过1秒.计数1000
let d1 = new Date();
console.log(d1.getTime()); // getTime是获取时间戳
// 前端时间戳的单位是毫秒
// 在python中时间戳单位是秒
//
// let d2 = new Date; // 这里也是创建时间对象
// console.log(d2.getTime());
//
// let arr = new Array;
// console.log(arr);
# # python: 1654001118778.3303
# # 前端 : 1654000975731
# print(time.time())
#
# # 需要你模拟出前端的 时间戳
# # 这里拿时间戳 -> 对应前端的getTime()
# t = int(time.time() * 1000)
3.screen对象
包含显示设备的信息
screen.height、screen.width:返回设备的分辨率。
screen.availWidth、screen.availHeight:返回屏幕可用宽高,值为屏幕的实际大小减去操作系统某些功能占据的空间,如系统任务栏。
4.location对象
保存当前文档信息,将URL解析为独立片段
location.href 返回当前页面完整的URL ,修改这个属性,即跳转新页面
location.hash 返回URL中的hash(#号后跟零或多个字符)
location.host 返回服务器名称和端口号
location.port 返回服务器端口号
location.pathname 返回URL中的目录和文件名
location.hostname 返回不带端口号的服务器名称
location.protocol 返回页面使用的协议(http://或https://)
location.search 返回URL的查询字符串,字符串以问号开头
//location
console.log(location.hash); //哈希 #后面带的值和search不能同时使用
console.log(location.host); //主机 域名 ip地址+端口号
console.log(location.hostname);//主机名 ip地址
console.log(location.protocol);//协议 用于通信 (基于tcp/ip)http(明文传输)https(安全,加密)
console.log(location.port);//端口号 1--65525 (1-100的端口号被电脑占用)http默认的端口号80 https默认端口443
console.log(location.href);//链接的地址,也可以设置
console.log(location.search);//?后面带的值 一般是get请求传输数据的时候
console.log(location.origin);//跨域
console.log(location.pathname);//路径名 获取的除了协议和ip地址
//使用href来跳转页面 通过更改路径地址来实现跳转
//location.href='http://www.baidu.com'
//相关方法
location.assign('http://www.4399.com')//跳转页面 保存历史记录
//替换
location.replace('http://www.weibo.com')//直接替换
//重新加载页面
function fn(){
location.reload(true)//参数是boolean类型的值 true(从服务器加载) false(从缓存中加载)
}
// window -> 窗口
// 跳转连接
// setTimeout(function(){
// // 自动跳转到某一个url地址
// // 在js里可以调整当前url的地址
// window.location.href="http://www.baidu.com?t="+new Date().getTime();
// }, 10);
5.navigator对象
提供一系列属性用于检测浏览器
window.navigator.userAgent :通过userAgent可以判断用户浏览器的类型
window.navigator.platform:通过platform可以判断浏览器所在的系统平台类型
window.navigator.online:判断是否联网
appCodeName 获取浏览器的内部代码名。
appMinorVersion 获取浏览器的辅版本号,常用于浏览器的补丁货服务包。
appName 获取浏览器的名称。
appVersion 获取浏览器的平台和版本信息。
language 获取当前浏览器的语言,例如,可能的一个结果是“zh-CN”。
cookieEnabled 获取浏览器中是否启用 cookie 的布尔值。
cpuClass 获取计算机系统的 CPU 型号,例如,Inter通常得到的结果是x86。
onLine 获取浏览器是否处于在线模式,结果是布尔值。
platform 获取运行浏览器的操作系统平台。
systemLanguage 获取 OS 使用的默认语言。
userAgent 获取由客户机发送服务器的 user-agent 头部的值。
userLanguage 获取 OS 的自然语言设置。
mimeTypes 获取浏览器支持的所有的MIME类型的数组。
plugins 获取安装在浏览器上的所有插件的数组。
product 获取浏览器的产品名,例如,可能的结果是Gecko。
productSub 获取浏览器产品的更多信息,例如,可能的结果是20030107。
vendor 获取浏览器的厂商名称,例如,可能的结果是Google Inc.。
vendorSub 获取浏览器的厂商更多信息。
查看navigator有哪些属性
console.log(navigator);
console.log(navigator.platform) // 判断是pc端还是移动端
console.log(navigator.userAgent) // 通过userAgent可以判断用户浏览器的类型,在爬虫程序中,可以伪造成浏览器进行数据爬取,绕开服务端的反爬机制;
6.history 对象
history.back():与在浏览器点击后退按钮相同
history.forward():与在浏览器中点击按钮向前相同
history.go(参数):前进后退功能,参数如果是1前进一个页面,如果是-1后退一个页面,如果是N则前进或后退N个页面
history.length(): 保存历史记录的数量
//length 历史页面个数,只能记录本页面中跳转的次数,其他页面只有在跳转到本页面后才记录
console.log(history.length);//要记
//scrollRestoration 滚动恢复属性 auto:自动 manual:手动操作 (keep-alive 缓存)
console.log(history.scrollRestoration);
//state 状态值 null
console.log(history.state); //要记
function fn(){
history.forward()//前进
}
function fn1(){
history.back()//后退
}
function fn2(){
history.go(1)//去任意页面,0就是自己,小于0,后退,大于0前进
}
function fn3(){
//添加state的值 数据 "" 地址
history.pushState('hello','','./index.html')
//会改变地址,但是不会刷新,会推一个页面到历史区,价值更高
}
function fn4(){
history.replaceState('world','','dizhi')//会改变地址,但是不会刷新,在历史区直接修改当前这个页面
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button onclick="func1()">查看历史对象</button>
<button onclick="func2()">跳转到上一页</button>
<button onclick="func3()">跳转到下一页</button>
<button onclick="func4()">当前页面刷新</button>
<script>
function func1(){
console.log(history);
}
history.length记录当前页面跳转的页面个数
function func2(){
history.go(-1);
}
执行这个函数相当于点击了浏览器的上一页
function func3(){
// history.go(1);
history.go(2);
}
function func4(){
history.go(0); //刷新当前页
}
onload, 当页面加载完html的时候.自动执行 防止页面还没加载完,就执行js代码,获取不到数据
// // xxxx.onxxx = function(){} 这种逻辑也能绑定事件
// window.onload = function(){
// // 页面中的内容还没有被加载好. 你就去选择页面上的东西. 此时拿到不到结果
// let btn = window.document.querySelector("#btn");
// // // console.log(btn);
// // // 有的时候. 爬虫的时候. script会放在上面或者放在下面
// // btn.onclick = function(){
// // console.log("你点我干嘛!!!!!!");
// // }
//
// // 最正宗的添加事件绑定的方案
// btn.addEventListener('click', function(){
// console.log("哈哈哈哈啊哈哈哈");
// })
// }
window.onload = function(){
let btn = document.querySelector("#btn")
btn.onclick = function(){
// 先拿到那个input. 输出东西
let input = document.querySelector("#uname");
input.value = "胡辣汤";
// html -> 触发 js事件 -> 修改和处理html结构
// 以后见到的页面异步加载数据
}
}