JS 之 BOM

100 阅读3分钟

BOM

BOM:浏览器对象模型,其实就是操作浏览器的一些能力

BOM 的核心就是 window 对象

window是JS内置的一个对象,里面包含着操作浏览器的方法

我们可以操作哪些内容?

获取浏览器的相关信息(窗口大小)

innerHeight / innerWidth

作用:获取浏览器窗口的高度和宽度(包含滚动条)

语法:window.innerHeight /window.innerWidth

console.log(window.innerHeight)

console.log(window.innerWidth)

操作浏览器进行页面的跳转

获取浏览器地址栏的信息

在window中,有一个对象叫做location,它是专门用来存储浏览器地址栏内的信息

location这个对象中,有一个属性叫做 href

这个属性是专门存储浏览器地址栏内的 url地址的信息

我们也可以给这个属性赋值,这样就会跳转到我们赋值的地址了

reload 这个对象中,有一个方法叫做reload

这个方法调用时会重新加载页面,相当于刷新

注意:不要直接写在代码中,否则浏览器会一直刷新

操作浏览器的滚动条

获取浏览器的版本(了解)

window 中的 navigator 可以获取到浏览器的信息

让浏览器出现一个弹出框

alert

prompt

confirm

有一个询问信息和两个按钮

点击确定按钮,返回true

点击取消按钮,返回false

  • ……

浏览器的历史记录

window对象中,有一个叫做 history 它专门用来存储历史纪录信息

history.back

专门用来回退历史记录,就是回到前一个页面,相当于浏览器左上角的 ← 按钮

注意:我们需要有上一条纪录,否则不能使用这个方法

语法:window.history.back()

history.forward

是去到下一个历史纪录里面,也就是去到下一个页面,相当于浏览器左上角的 → 按钮

注意:我们需要之前有过回退操作,不然无法使用这个方法

语法:window.history.forward()

浏览器的 onload 事件

这个事件会在页面所有资源加载完毕后执行

语法:

window.onload = function(){
     
   我们的JS代码全部书写在这个函数内部
   
 }

在浏览器中,把JS写在 head 中,在JS加载时,下边的body标签还没来得及加载

可能会导致我们获取 body内部的标签,比如 div 或者 img ,出现问题获取不到

如果把代码放在 onload 中,则不会出现这个问题

如果把 JS写在 body 底部,写不写 onload 都无所谓

浏览器的 onscroll 事件

当浏览器的滚动条滚动时会触发该事件,或者鼠标滚轮滚动时触发(前提是有滚动条)

浏览器的滚动距离

浏览器的内容可以滚动,那么我们就能获取到浏览器的滚动距离

思考:浏览器真的滚动了吗?

其实浏览器并没有滚动,而是浏览器内部的页面在滚动

换句话说:浏览器没动,页面向上或者向下走了

所以这个不能单纯的说是浏览器的内容了,而是页面的内容

那么我们这里就不能再使用 window对象,而是使用 document 对象

scrollTop 获取的是页面向上滚动的距离

语法1:document.body.scrollTop

语法2:document.documentElement.scrollTop

两种语法的区别:

  • IE浏览器(了解)

  • 没有DOCTYPE 声明的时候,两种语法没有差别,用哪个都无所谓

  • 有DOCTYPE 声明的时候,只能使用语法2(documentElement)

  • Chrome 和 FireFox

    • 没有DOCTYPE 声明的时候,用语法1 body

    • 有DOCTYPE 声明的时候,用语法2 documentElement

  • Safari浏览器

    • 这两个语法都不用,使用一个单独的方法 window.pageYOffset

scrollLeft 获取的是页面向左滚动的距离

  • 语法1:document.body.scrollLeft

  • 语法2:document.documentElement.scrollLeft

  • 区别:参考scrollTop*