BOM

什么是BOM

BOM(Browser Object Document)即浏览器对象模型。

BOM提供了独立于内容 而与浏览器窗口进行交互的对象;

由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window;

BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性;

BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分。

window对象

window对象是js中的顶级对象,所有定义在全局作用域中的变量、函数都会变成window对象的属性和方法,在调用的时候可以省略window。

定时器

延迟执行setTimeout( [string | function] code, interval);

clearTimeout([number] intervalId);

定时执行var timerId = setInterval(code, interval);

clearInterval(timerId);     //清除定时器

offset系列方法

offsetWidth和offsetHeight

offsetHeight的构成

offsetHeight = height + padding + border

offsetWidth相同

offsetHeight和style.height的区别

1. demo.style.height只能获取行内样式,否则无法获取到

2. .style.height是字符串(有单位px), offsetHeight是数值(无单位)

3. .style.height可以设置行内样式,但offsetHeight是只读属性,不可设置

所以:demo.style.height获取 某元素的真实高度/宽度,用.style.height来设置高度/宽度

offsetLeft和offsetTop

offsetLeft的构成

1,到距离自身最近的(带有定位的)父元素的 左侧/顶部

2,如果所有父级元素都没有定位,则以body为准

3,offsetLeft是自身border左侧到父级padding左侧的距离

offsetLeft和style.left的区别

1,style.left只能获取行内样式

2,offsetLeft只读,style.left可读可写

3,offsetLeft是数值,style.left是字符串并且有单位px

4,如果没有定位,style.left获取的数值可能是无效的

5,最大的区别:offsetLeft以border左上角为基准, style.left以margin左上角为基准

offsetParent

构成

1. 返回该对象距离最近的带有定位的父级元素

2. 如果当前元素的所有父级元素都没有定位(position为absolute或relative),那么offsetParent为body

3. offsetLeft获取的就是相对于offsetParent的距离

与parentNode的区别

parentNode始终指向的是当前元素的最近的父元素,无论定位与否

scroll系列方法

scrollHeight和scrollWidth对象内部的实际内容的高度/宽度(不包括border)

scrollTop和scrollLeft被卷去部分的顶部/左侧 到 可视区域 顶部/左侧 的距离

onscroll事件滚动条滚动触发的事件

页面滚动坐标var scrollTop = window.pageYoffset || document.documentElement.scrollTop || document.body.scrollTop || 0;

client系列

clientX和clientY     获取鼠标在可视区域的位置     clientX = width + padding,clientY = height + padding

clientLeft     边框的宽度,若有滚动条的话,包括滚动条

事件参数e

当事件发生的时候,系统会自动的给事件处理函数传递一个参数,会提供事件相关的一些数据,事件参数e浏览器的兼容性检测: e = e || window.event

获得计算后样式的方法

w3c标准window.get ComputedStyle(element, null)[属性]

IE浏览器element.currentStyle[属性]

封装浏览器兼容性函数function getStyle(element, attr) {

if(window.getComputedStyle) {

return window.getComputedStyle(element, null)[attr];

} else {

return element.currentStyle[attr];

}

}

事件补充

注册事件

注册事件的性能问题

移除事件

事件冒泡

事件捕获  事件的三个阶段

事件对象的常见属性

DOM笔记里有提到注册事件和移除事件,这里着重讲事件对象,事件对象的常见属性

target 和currentTarget

target始终是点击的元素(IE8及之前是srcElement)

currentTarget执行事件处理函数的元素

this始终和currentTarget一样

事件冒泡

用addEventListener注册事件的时候,第三个参数是false,即是冒泡。

当事件冒泡影响到了其他功能的实现时,需要阻止冒泡

e.stopPropagation( )IE8及之前:   event.cancleBubble = true;

阻止默认行为的执行

e.preventDefault()IE8及之前:  event.returnValue = false;

鼠标事件的参数

e.type事件的类型,如click,mouseover

事件的3个阶段1 捕获阶段 2 目标阶段 3 冒泡阶段

e.eventPhase事件阶段

shiftKey/ctrlKey/altKey按下鼠标同时按下组合键

button获取鼠标的按键

e.clientX和e.clientY获取鼠标在可视区域的位置

还有7.2中的取消事件冒泡和阻止默认行为的执行

键盘事件对象

方法

keydown  按下时

keypress  按下

keyup  抬起时属性

keyCode  键盘码,只有数字和字母对应ASCII码

charCode  对应ASCII码,只有在keypress中才生效(IE9+)

你可能感兴趣的:(BOM)