BLOG
Enjoy when you can, and endure when you must.
NOV 27, 2012/JavaScript
文档和元素的大小和滚动条

一、窗口的大小:

    w = w || window;
    if (w.innerWidth != null) return {width: w.innerWidth, height: w.innerHeight};
    if (document.compatMode == "CSS1Compat") {
        return {width: w.document.documentElement.clientWidth,
                height: w.document.documentElement.clientHeight};
    } else {
        return {width: w.document.body.clientWidth,
                height: w.document.body.clientHeight};
    }
}

在标准模式下,对于所有浏览器document.body.clientWidth获取的是视窗的宽度,而document.body.clientHeight获取的是body内元素的高度之和。如果元素有margin,元素之间的maring参与计算,元素与body之间的margin不参与计算。而在IE6&IE7下,第一个元素与body之间的margin也参与计算。

document.documentElement.clientWidth/Height 获取的是视窗尺寸。

document.body获得的都是body节点,document.documentElement获得html节点。

在怪异模式下,对于chrome和safari,document.body.clientWidth/Height和document.documentElement.clientWidth/Height两者都可以获取视窗尺寸。但在IE中,只能通过document.body.clientWidth/Height 获取视窗尺寸,document.documentElement.clientWidth和document.documentElement.clientHeight均得到的是0。

opera和firefox则相反,document.body.clientWidth/Height获取的是视窗尺寸,document.documentElement.clientWidth/Height获取的是body内元素的尺寸。

二、获取滚动条的位置:

    w = w || window;
    if (w.pageXOffset != null) return {x: w.pageXOffset, y: w.pageYOffset};
    if (document.compatMode == "CSS1Compat") {
        return {x: w.document.documentElement.scrollLeft,
                y: w.document.documentElement.scrollTop};
    } else {
        return {x: w.document.body.scrollLeft,
                y: w.document.body.scrollTop};
    }
}

除了IE8及更早的版本以外的浏览器都支持使用pageXOffset和pageYOffset属性查询滚动条的位置;

在IE和所有现代浏览器中,都可以通过scrollLeft和scrollTop来查询。但在标准模式下,可以通过查询文档的根节点来获取这个信息,但在怪异模式中需要在文档的body元素上查询。

COMMENTS
LEAVE COMMNT