7.1 认识BOM

作者: liufeisheng

创建时间: 2024-04-24 07:09:19


浏览器对象模型(Browser Object Model,BOM)主要用于访问和操纵浏览器窗口。BOM主要是由一系列的浏览器对象组成的。这一系列的浏览器对象被称为BOM对象体系如图7-2所示。BOM主要包括Window、Document、History、Location、Navigator、Screen等对象,主要用于操纵浏览器窗口的行为和特征。本任务将详细介绍BOM对象。

image.png

image.png

在BOM对象体系中,Window位于顶层,可以使用标识符window直接访问下层对象,如下代码所示。 window.document.write(“hello!”); 因为Window是顶层对象,在平时写代码时,window是可以省略的,如上述代码可以直接写成如下语句。 document.write(“hello!”);

Window对象用来表示浏览器中一个打开的窗口。Window对象的属性如表所示。

image.png

Window对象的方法如表所示:

image.png setInterval() 方法指按照指定的周期(以ms计)来循环调用函数或计算表达式。 定时器的语法格式如下。 setInterval(code/function, milliseconds); 其中code/function是指要执行一段JavaScript代码或者一个函数;milliseconds是指 周期性执行或调用code/function的时间间隔,以ms计。

执行一段JavaScript代码实现定时的代码如下。 setInterval(“alert(‘hello’)”,2000); 这表示每隔2s弹出“hello”,这里通过代码字符串的方式实现,也可以通过自定义函数的方式实现,具体如下。 function FunHello(){ alert("hello"); } setInterval(FunHello,2000);

通过执行自定义函数的方式来设置定时器时,函数可以带参数,然后将参数输出。定时器在调用带参数的函数时,需要使用JavaScript代码字符串来调用 。 function alertFunc(str) { alert(str); } setInterval("alertFunc('hello')", 2000); 如果想要在定时器启动后取消它,我们可以将setInterval()方法的返回值传递给clearInterval()方法,具体如下。 var timerId = setInterval(FunHello, 2000); clearInterval(timerId);

延时器setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。

延时器的语法格式如下。 setTimeout(code/function, milliseconds); 其中code/function是指要执行一段JavaScript代码或者一个函数,milliseconds是指延迟的时间,以ms计。

执行一段JavaScript代码实现延时的代码如下。 setTimeout(“alert(‘hello’)”,2000); 这段代码是指2s后弹出“hello”,这里通过代码字符串的方式实现,也可以通过自定义函数的方式实现,具体如下。 function FunHello(){ alert("hello"); } setTimeout(FunHello,2000);

通过执行自定义函数的方式来设置延时器时,函数可以带参数,然后将参数输出。延时器在调用带参数的函数时,需要使用JavaScript代码字符串来调用。 function alertFunc(str) { alert(str); } setTimeout("alertFunc('hello')", 2000); 如果想取消延时器,我们可以将setTimeout()方法的返回值传递给clearTimeout()方法,具体如下。 var timerId = setTimeout(FunHello, 2000); clearTimeout(timerId);

image.png

image.png

<!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>
    <p id="p1"><a href="javascript:startShow()">显示时钟</a></p>
    <p><a href="javascript:stopShow()">取消时钟</a></p>
    <script type="text/javascript">
        var timerID;
        function showTime(){
            var now = new Date();
            var p1 = document.querySelector("#p1");
            p1.innerHTML = now.toLocaleTimeString();
            console.log(now);
            console.log(now.toLocaleTimeString());
        }
        function startShow(){
            timerID = setInterval(showTime,1000);
        }
        function stopShow(){
            clearInterval(timerID);
        }
    </script>
</body>
</html>

image.png

打开和关闭窗口

open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口,具体语法格式: window.open(URL,name,specs) 其中URL是指要打开的指定页面的URL,如果没有指定URL,则打开一个新的空白窗 口;name是指target属性或窗口的名称;specs是指窗口的特征列表,通过逗号分隔,具体如表所示。

image.png

close() 方法用于关闭浏览器窗口,除了关闭主窗口外,还可以关闭新创建的窗口,具体用法如下: window.close(); myWindow.close(); myWindow.close()表示关闭myWindow窗口,而myWindow是通过open()方法创建的窗口,也就是前面open()的返回值。

image.png

image.png

image.png

<!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>
    <p><a href="javascript:openWin()">打开新窗口</a></p>
    <p><a href="javascript:closeWin()">关闭新窗口</a></p>
    <p><a href="javascript:open()">关闭窗口</a></p>
    <script>
        var newWin = null;
        function openWin(){
            newWin = open("http://www.liufeisheng.cn","newWin",
                "width=400,height=200,left=120,top=110");
        }
        function closeWin(){
            if(newWin!=null){
                newWin.close();
                newWin=null;
            }else{
                alert("没有要关闭的窗口");
            }
        }
    </script>
</body>
</html>

在演示代码中,openWin()函数中的open()的参数分别为要打开窗口的URL,新窗口的名字,新窗口的宽度、高度,左边距和上边距等。javascript:openWin()是通过超链接调用函数的方法。closeWin()方法通过使用openWin()方法的返回值来调用。

image.png

改变窗口大小

resizeTo(x,y)方法用来改变窗口的大小,x和y代表改变后的宽度和高度,单位是px;而resizeBy(x,y)方法也用来改变窗口的大小,但是x和y代表在原来的基础上扩大或者缩小的数值,为正数表示扩大,为负数表示缩小,具体用法如下所示: window.resizeTo(400,400);//窗口大小调整为400*400 window.resizeBy(-500,-500);//窗口大小在原来基础上各缩小500

所有主要浏览器都支持 resizeTo() 方法,但是从火狐浏览器7开始,不能改变浏览器窗口的大小了,要依据下面的规则。  不能设置那些不是通过window.open()创建的窗口大小。  当一个窗口里面含有一个以上的 Tab 时,无法设置窗口的大小。 除此之外,如果我们想获取浏览器窗口本身的大小,可以通过outerWidth和outerHeight属性来获取,还可以通过innerWidth和innerHeight属性来获取浏览器窗口减去浏览器自身边框及菜单栏、地址栏、状态栏等的宽度/高度。

image.png

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>更改窗口大小</title>
</head>
<body>
    <p><a href="javascript:openWin()">打开新窗口</a></p>
    <p><a href="javascript:resizeWin()">改变窗口大小</a></p>
    <p><a href="javascript:resizeX()">水平缩小100px</a></p>
    <p><a href="javascript:showSize()">显示目前大小</a></p>
    <script>
        var newWin = null;
        function openWin(){
            newWin = open("","","width=400,height=100,left=120,top=110");
            newWin.document.write(`初始大小:<br/>
            outerWidth:${newWin.outerWidth}\n outerHeight:${newWin.outerHeight}<br />
            innerWidth:${newWin.innerWidth}\n innerHeight:${newWin.innerHeight}<br />`);
        }
        function resizeWin(){
            newWin.resizeTo(600,300);
            newWin.focus();
            newWin.document.write(`第一次改变大小:<br/>
            outerWidth:${newWin.outerWidth}\n outerHeight:${newWin.outerHeight}<br />
            innerWidth:${newWin.innerWidth}\n innerHeight:${newWin.innerHeight}<br />`);
        }
        function resizeX(){
            newWin.resizeBy(-100,0);
            newWin.focus();
            newWin.document.write(`第二次改变大小:<br/>
            outerWidth:${newWin.outerWidth}\n outerHeight:${newWin.outerHeight}<br />
            innerWidth:${newWin.innerWidth}\n innerHeight:${newWin.innerHeight}<br />`);
        }
        function showSize(){            
            alert(`
            outerWidth:${newWin.outerWidth}\n outerHeight:${newWin.outerHeight}<br />
            innerWidth:${newWin.innerWidth}\n innerHeight:${newWin.innerHeight}<br />`);
            newWin.focus();
        }
    </script>
</body>
</html>

改变窗口位置

MoveTo(x,y)方法用来移动窗口,x和y代表距离屏幕左上角的水平和垂直距离,单位是px;而MoveBy(x,y)方法也用来移动窗口,但是x代表在原来的基础上向左移动(x<0)或者向右移动(x>0)的距离,具体用法如下所示: window.moveTo(100,100);//窗口移动到(100,100) window.moveBy(10,-50);//窗口在水平方向上向右移动10像素,向上移动50像素

除此之外,如果我们想获取窗口当前位置,可以通过screenLeft和screenTop属性来获取,这表示窗口相对于屏幕左边和上边的位置。screenX和screenY属性也提供相同的位置。

image.png

image.png

<!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>
    <p><a href="javascript:openWin()">打开新窗口</a></p>
    <p><a href="javascript:moveWin()">改变窗口位置</a></p>
    <p><a href="javascript:moveY()">向上移动100px</a></p>
    <p><a href="javascript:showPos()">显示目前位置</a></p>
    <script>
        var newWin = null;
        function openWin(){
            newWin = open("","","width=400,height=100,left=120,top=110");
            newWin.document.write(`初始位置:<br/>
            Left:${newWin.screenLeft}\n Top:${newWin.screenTop}<br />`);
        }
        function moveWin(){
            newWin.moveTo(100,100);
            newWin.focus();
            newWin.document.write(`第一次改变位置:<br/>
            Left:${newWin.screenLeft}\n Top:${newWin.screenTop}<br />`);
        }
        function moveY(){
            newWin.moveBy(0,-100);
            newWin.focus();
            newWin.document.write(`第二次改变位置:<br/>
            Left:${newWin.screenLeft}\n Top:${newWin.screenTop}<br />`);
        }
        function showPos(){
            alert(`当前位置:<br/>
            Left:${newWin.screenLeft}\n Top:${newWin.screenTop}<br />`);
        }


    </script>
</body>
</html>