DOM
2016-07-08 本文已影响0人
cooore
- FF、Opera 和 IE 浏览器认为在客户端浏览器展示的页面的内容对应于整个 HTML,所以使用 document.documentElement
来代表,相应的滚动距离则通过 document.documentElement.scrollLeft
和 document.documentElement.scrollTop来获取。 - 而 Safari 和 Chrome 浏览器则认为页面开始于 body 部分,从而相应的滚动距离用 document.body.scrollLeft 和 document.body.scrollTop
来获取。另外需要注意的是,FF 和 IE 的 quirks mode(兼容模式)下是用 document.body来获取的。
documentElement 对应的是 html 标签,而 body 对应的是 body 标签。
var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
- offsetTop, offsetLeft 都是相对于最近一个有定位的父元素,如果都没有那么就是相对于 body 的偏移位置。
- offsetParent是寻找最近一个有定位的父级元素,如果没有,那么找到 body 元素。
- 如果有定位的父级元素不是 body,是 A 元素,那么再寻找 A 元素的最近的有定位的父级元素,如果没有,就是相对于 body 的定位,这时,所求偏移量就是 A 的偏移量加所求元素相对于 A 的偏移量。如果 A 还有已经定位的父级元素,就继续去推,直到找到 body 为止。
E8+ 支持 addEventListener()。IE8 以下的版本使用 attachEvent()
。
- attachEvent()
不支持事件捕获。 - attachEvent()
第一个参数事件处理程序属性名使用前缀 on。 - attachEvent()
允许相同的事件处理程序函数注册多次。