BOM-window

256 阅读2分钟

BOM(Browser Object Model,浏览器对象模型) 是JS与浏览器窗口交互的接口

一些与浏览器改变尺寸、滚动条相关的特效,都要借助BOM技术

window对象

window对象是当前JS脚本运行所处的窗口,而这个窗口中包含DOM结构,window.document属性就是document对象

在有标签页功能的浏览器中,每个标签都拥有自己的window对象;也就是说,同一个窗口的标签页之间不会共享一个window对象

全局变量是window的属性

全局变量会成为window对象的属性

    var a = 10;
    console.log(window.a == a );//true

这就意味着,多个js文件之间是共享全局作用域的,即js文件没有作用域隔离功能

内置函数普遍是window的方法

如setInterval()、alert()等内置函数,普遍是window的方法

窗口尺寸相关属性

属性意义
innerHeight浏览器窗口的内容区域的高度,包括水平滚动条(如果有的话)
innerWidth浏览器窗口的内容区域的宽度,包括水平滚动条(如果有的话)
outerHeight浏览器窗口的外部高度
outWidth浏览器窗口的外部宽度

要获得不包括滚动条的窗口宽度,要用

document.documentElement.clientWidth

 <style>
        /* 使窗口出现滚动条 */
        body{
            height:5000px;
        }
    </style>



<script>
        console.log('窗口内宽(包括滚动条)',window.innerWidth);
        console.log('窗口外宽',window.outerWidth);
        console.log('窗口内宽(不包括滚动条',document.documentElement.clientWidth);
    </script>

resize事件

在窗口大小改变之后,就会触发resize事件,可以使用window.onresize或者window.addEventListener('resize')来绑定事件处理函数

  <script>
        // 监听窗口改变尺寸事件
        window.onresize = function(){
        //根元素 将窗口取出
            var root = document.documentElement;
            console.log('窗口改变尺寸了',root.clientWidth,root.clientHeight);
        }
    </script>

已卷动高度

window.scrollY属性表示垂直方向已滚动的像素值

document.documentElement.scrollTop属性也表示窗口已卷动高度


//进行短路运算,就算 或运算 前面的没有获取到后面的在进行获取

var scrollTop = window.scrollY || document.documentElement.scrollTop

document.documentElement.scrollTop不是只读的,可以改变值;而window.scrollY是只读的

    <style>
        body {
            height:5000px;
        }
    </style>

 <script>
 //可以在控制台改变document.documentElement.scrollTop值
        console.log(document.documentElement.scrollTop);
        console.log(window.scrollY); 
    </script>

scroll事件

在窗口被卷动之后,会触发scroll事件,可以使用window.onscroll 或者 window.addEventListener('scroll')来绑定事件处理函数

 <style>
        body {
            height:5000px;
        }
    </style>
    
    
      <script>
        window.onscroll = function (){
            console.log('窗口卷动了',window.scrollY);
        };
    </script>