我们知道,js的组成部分分为三类,ECMA、DOM、BOM
学习BOM来操作浏览器,BOM意思是浏览器模型,BOM中最大的对象叫window,是浏览器窗口对象包含了许多的浏览器的操作
浏览器信息(navigator)
console.log(window.navigator.appCodeName); // 返回浏览器的代码名
console.log(window.navigator.appName); // 返回浏览器的名称
console.log(window.navigator.appVersion); // 返回浏览器的平台和版本信息
console.log(window.navigator.cookieEnabled); // 返回指明浏览器是否启用cookie的布尔值
console.log(window.navigator.platform); // 返回运行浏览器的操作系统平台
console.log(window.navigator.userAgent); // 返回由客户机发送服务器的user-agent头部的值
结果
书写时可以将window省略
浏览器的历史记录:history,可以控制网页的前进和后退
history.back()返回上一个页面
history.forward()前进到下一个页面
history.go(数值)正数表示前进几个页面,负数表示后退几个页面
浏览器的地址栏操作,location
地址栏的组成:当前页面的路径+数据部分+锚点,
数据部分:文件路径?键=值&键=值&键=值...
location的三种属性
console.log(window.location.href)//输出网址,默认编码
解码:decodeURI()
编码:encodeURI()
console.log(location.hash)//输出网址中的锚点,若是没有,则输出空
console.log(location.search)//设置或返回从问号 (?) 开始的 URL(查询部分
location的三种设置
1.设置锚点<button id="setmaodian">设置锚点</button>
setmaodian.onclick = function() {
window.location.hash = '#mima'
}
2.设置数据<button id="setdata">设置数据</button>
setdata.onclick = function() {
window.location.search = '?name=zhangsan'
}
3.跳转网址<button id="sethref">设置路径</button>
sethref.onclick = function() {
window.location.href = '10-history/c.html'
}
浏览器的弹出层 alert、confirm、prompt都属于window的方法,我们很多操作都是以window开头,为了简便就省略了。
浏览器的窗口尺寸
window.innerHeight - 浏览器窗口的高度
window.innerWidth - 浏览器窗口的宽度
返回值单位是像素
计算范围包括滚动条
浏览器事件
onload事件:当所有的资源加载完成后再执行此代码
语法: window.οnlοad=function(){
consol.log()
}
onscroll:当网页滚动条位置发生变化时触发这个事件
语法:window.οnscrοll=function(){
console.log(' ')
}
onresize:浏览器窗口大小改变时触发代码
语法: window.onresize =func(){
console.log(' ')
}
获取浏览器向下滚动的距离
document.documentElement.scrollTop 当前文档有doctype,即文档第一行,位于<html>前面
否则则用document.body.scrollTop
兼容写法document.documentElement.scrollTop || document.body.scrollTop
例子
var t = document.documentElement.scrollTop || document.body.scrollTop;
获得向右的距离 document.body.scrollLeft document.documentElement.scrollLeft
短路运算符 :|| 和&&
| |
var a;
var b = a || 2; // 如果a有值,就将值赋给b,如果a没有值,就给b赋2 - 此时是将2赋给b&&则是反过来
定时器 ,有两种,一种是延迟进行,另一种是间隔多久进行一次
延迟进行
语法 var 变量名=setTimeout(function(){
执行的代码段
},延迟时间)延迟时间按毫秒为单位
关闭定时器 clearTimeout(timeId)大写的 i
间隔进行
语法 var 变量名=setInterval(function(){
执行的代码段
},间隔多久进行)间隔时间按毫秒为单位
关闭定时器 clearInterval(timeId)大写的 i
异步操作
定时器是我们学习中第一个异步代码,到目前为止,只有定时器是异步代码
区别:同步是一个接着一个执行,异步是互不干扰,同一时间两件事件同时进行
流程:
s执行代码的内存:调用栈
从上到下将每一行代码放到调用栈中执行,
被执行的代码是同步代码,直接执行
被执行的代码是异步代码,将异步代码放在浏览器中开始计时
此时,js在执行同步代码,浏览器在计时
当浏览器中倒计时到时间了,有一段代码应该被执行了,但是浏览器不会执行这段的,会将这段代码放在一个队列中,等待执行
当调用栈将所有的同步代码执行结束以后,会去队列中,找是否有需要执行的代码,如果有就执行,如果没有,就过一段时间再到队列中找一次