BOM

82 阅读2分钟
BOM:browser object model 浏览器对象模型
顶层对象:window,浏览器窗口

navigator:window的子对象,记录浏览器的信息

1:appName:浏览器名称
console.log(window.navigator.appName)  //Netscape
2:appCodeName:浏览器内核名称
console.log(window.navigator.appCodeName)  //mozilla
3:appVersion:浏览器版本
console.log(window.navigator.appVersion)  //具有迷惑性
4:userAgent:浏览器的用户信息
console.log(window.navigator.userAgent)  

location:操作浏览器地址栏

地址栏 = 当前页面的路径 + 数据 + 锚点
三个属性
获取:
    1:href:当前页面的路径
    console.log(window.location.href)  
    2:hash:锚点
    console.log(window.location.hash)
    3:search:数据
    console.log(window.location.search)
三个方法:
    1:assign:网页重定向
    window.location.assign('路径')
    2:replace:将当前地址替换成新地址
    window.location.replace('路径')
    3:reload:刷新
    window.location.reload()
    

浏览器窗口尺寸

浏览器窗口宽:innerWidth
var w = window.innerWidth
console.log(w)
浏览器窗口高:innerHeight
var h = window.Height
console.log(h)
浏览器窗口宽和高都包含滚动条

window的事件

1:onload:当此页面的所有资源加载完成以后在加载当前事件中的代码
window.onload = function(){

}
2:onscroll:当浏览器的滚动条发生滚动后会触发的事件
var k=0
window.onscroll = function(){
    k++
    console.log('滚动了' + k + '次')
}
3:onresize:当浏览器窗口大小发生变化会触发的事件
window.onresize = function(){
 console.log(111)
}

定时器

js提供两个window方法:让一段代码在一段时间后执行,或者让一段代码
   window.setInterval(function(){},毫秒数)
   比如:var a = window.setInterval(function(){
            console.log(111)
         },3000) //每隔3秒执行一次,并且会一直执行
        console.log(a) 
   定时器的返回值代表当前页面中的第几个定时器 - 作用是用于停止定时器
   btn.onclick = function(){
       clearInterval(a)  //停止定时器
   }
2:让一段代码延迟多久执行
    window.setTimeout(function(){},毫秒数)
    比如:var a = window.setTimeout(function(){
            console.log(333)
         },3000) //隔3秒执行,只执行一次
        console.log(a) 
        定时器的返回值代表当前页面中的第几个定时器 - 作用是用于停止定时器
       btn.onclick = function(){
           clearTi(a)  //停止定时器
       }
       

异步代码

 同步代码:代码需要按照顺序,前面的执行完,后面的才可以执行
 异步代码:两段代码同时执行,互不干扰
 

在js中,异步代码,执行流程:

js执行代码的内存:调用栈

从上到下将每一行代码放到调用栈中执行,

    被执行的代码是同步代码,直接执行
    被执行的代码是异步代码,将异步代码放在浏览器中开始计时
    
此时,js在执行同步代码,浏览器在计时

当浏览器中倒计时到时间了,有一段代码应该被执行了,但是浏览器不会执行这段的,
会将这段代码放在一个队列中,等待执行

当调用栈将所有的同步代码执行结束以后,会去队列中,找是否有需要执行的代码,
如果有就执行,如果没有,就过一段时间再到队列中找一次

我们没有说这是异步代码,代码就是同步的,目前为止,只有定时器是异步代码