A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adagio 初级黑马   /  2018-5-30 00:14  /  820 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、BOM概述

BOM(Browser Object Model)即浏览器对象模型,是一套用来管理控制浏览器的规则。

(1)BOM和DOM很像,都是一套管理抽象对象的规则。

(2)BOM主要负责页面与页面之间的通讯。

(3)BOM的核心对象是window对象,通常情况下说BOM一般都是说的window对象。

(4)BOM因为是对浏览器进行管理的规则,因此并没有统一的标准。


二、BOM与DOM的关系

DOM通过document对象来访问、控制、修改html和xhtml等文档中的内容;

BOM通过window对象来访问、控制、修改浏览器中的内容

联系:BOM包含DOM,BOM规则从范畴上来说,包括DOM规则,从而使得html文档的脚本JavaScript操作可以通过访问浏览器、进而通过执行浏览器对象的DOM操作来获取文档的内容。

        window.document.querySelector("xxx").onclick = functon () {};

        window.console.log("xxx");


三、JavaScript内置对象Window

    window对象是BOM规则中提出的,一个用来代表浏览器本身的对象。

    (1)window对象是整个JavaScript中的顶级对象,不存在任何结构上超过window对象的结构,像document对象等结构都是window对象的子级结构。

    (2)全局作用域可以理解为window对象生效的范围,故而在全局作用域中声明的变量和函数都会自动成为window对象的属性和方法。

    (3)window对象的属性和方法可以不显式的写出window,而是直接写出属性名或方法名即可调用。


window对象的常用属性:

window对象的name属性

     name属性,name属性是在打开的浏览器内,不同的页面、甚至不同域名之间加载后依旧存在的一个window对象的属性,其属性值默认为空,可以对其赋任意值(但习惯上赋字符串类型的值)。

        (1)正是因为window对象拥有一个叫做name的系统自带属性,所以我们才不允许用户自己创建名为name的变量,因为这有可能导致系统name属性值被覆盖。

        (2)name属性在某种程度上来说和cookie作用类似,但是name属性的大小可以存储到2MB左右,相比于cookie的4x20k来说,传输数据优势更大。

        (3)name属性针对跨域名存在的特性开发出了一个叫做跨域传输的技巧。

window对象的尺寸属性

(1)window.outerHeight | window.outWidth

        这两个属性返回的是整个浏览器的宽高,和页面窗口的大小没有任何关系

(2)window.innerHeight | window.innerWidth

        返回视口的宽高(计算滚动条的高度),页面变化它就变化

(3)document.documentElement.clientHeight | document.documentElement.clientWidth

        返回视口的宽高(不计算滚动条的高度)

window对象的navigator属性

    window.navigator属性包含了大量有关web浏览器的信息,在检测浏览器及操作系统上非常有用,这个属性是一个对象类型的属性,在全局作用域内唯一存在。

navigator.appCodeName    //    浏览器代码名的字符串表示

navigator.appName    //    官方浏览器名的字符串表示

navigator.appVersion    //    浏览器版本信息的字符串表示

navigator.cookieEnabled    //    如果启用cookie返回true,否则返回false

navigator.javaEnabled()    //    如果启用java返回true,否则返回false

navigator.platform    //    浏览器所在计算机平台的字符串表示

navigator.plugins    //    安装在浏览器中的插件数组

navigator.userAgent    //    返回和浏览器内核相关的信息,如果window.navigator.userAgent出现了Mobile,一般可以确定用户使用的是移动设备

window对象的history属性

    本属性表示整个浏览器的页面栈结构,是一个对象类型的属性。在本属性对象中提供了一些固定的属性和方法,来帮助更好的控制整个浏览器中页面的访问。

    (1)window.history.back()        跳转到栈中的上一个页面

    (2)window.history.forward()        跳转到栈中的下一个页面

    (3)window.history.go(num)        跳转到栈中指定页面

    (4)window.history.length        栈中页面的数量


window对象的常见方法

window对象的窗口操作方法

    window.open('url'); / window.close();    //    打开一个以某url为地址的新窗口 / 关闭当前窗口

window对象的警示框操作方法

    window.alert("alertMsg");

    window.prompt("alertMsg", "defaultMsg");

    window.confirm("alertMsg");

    说明:

        (1)三个方法弹出的警示框都遵循【模态框样式】,即用户没有对弹出的对话框做出响应时,程序不会继续向下执行。

        (2)prompt方法弹出的对话框允许用户在内部进行输入,并且可以通过方法的返回值获取到用户输入的内容。

                var iptStr = prompt("alertMsg", "defaultMsg");

                console.log(iptStr);

        (3)confirm方法弹出的对话框则会给用户一个布尔值情况的选择,并且通过返回值将布尔值返回。

                var result = confirm("alertMsg");

                console.log(result);

window对象的间隔调用方法

    window对象提供一个名为setInterval的方法,允许用户在间隔时间内重复调用某个函数,又被称作【定时器】

            var timer = null;

            timer = setInterval(调用函数,时间间隔ms);

            timer = setInterval( function (){ console.log( "hello world!" ) }, 1000 ); // 每间隔1s输出一次hello world

   清除方法:clearInterval();

   补充说明:

                (1)setInterval函数返回的实际上是一个数字队列(1,2,3。。。),代表了第几个间隔调用,在清除间隔调用的时候不写变量名称,而是写数字队列,一样可以对间隔调用函数进行清除。 // clearInterval(1); 清除第一个间隔调用

                (2)如果setInterval间隔调用的函数需要传参,则需要采用字符串形式。

                                语法:setInterval(字符串,时间间隔ms)

                                例子:

                                        var timer = null;

                                        function show(words){console.log(words);}

                                        timer = setInterval("show('hello world !')", 2000);

                (3)间隔调用不是立即执行,而是在【任务队列中的任务完成后】才执行间隔调用

                (4)因为间隔调用函数的实际执行者是window,因此间隔调用内部的this指向window

window对象的延迟调用方法

    window对象提供一个名为setTimeout的方法,允许用户在等待一定时间后再调用某个函数,又被称作【延迟器】。

        var timer = null;

        timer = setTimeout(调用函数, 延迟时间ms);

        例子:

                var timer = null;

                timer = setTimeout(function (){ console.log("hello world !") }, 1000); // 等待1s后输出一次hello world

        清除方法:clearTimeout(timer);

        补充说明:

                (1)setTimeout函数返回的实际上是一个数字队列,代表了第几个延迟调用。在清除延迟调用的时候不写变量名称,而是写数字队列,一样可以对延迟调用函数进行清除。

                (2)延迟调用尽管只执行一次,但是在特定情况下,也必须要清除。

                (3)延迟调用不是立即计时,而是在【任务队列中任务完成后】才开始计时,执行延迟调用。

                (4)因为延迟调用函数实际执行者是window,因此延迟调用内部的this指向window。

                (5)间隔调用函数和延迟调用函数返回的结果共用一个数字队列!!!






3 个回复

倒序浏览
向清波 来自手机 初级黑马 2018-5-30 11:18:04
沙发
墙都不扶,舅服你
回复 使用道具 举报
adagio 来自手机 初级黑马 2018-5-30 17:59:59
藤椅
帅的一匹
回复 使用道具 举报
牛批牛批牛批牛批牛批
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马