`
houfeng0923
  • 浏览: 144819 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth

 
阅读更多

 注:(scrollHeight、offsetHeight、clientHeight 同样可按本文去理解。)

这是一个很复杂的问题,让我们想像一下:

  • document.documentElement.scrollWidth
  • document.documentElement.offsetWidth
  • document.documentElement.clientWidth
  • document.body.scrollWidth
  • document.body.offsetWidth
  • document.body.clientWidth

有 6 个属性要测,这 6 个属性要放在 4 种情况中:

  • 没有指定 DOCTYPE,网页内容没有超过窗口宽度;
  • 没有指定 DOCTYPE,网页内容超过窗口宽度;
  • 指定 DOCTYPE,网页内容没有超过窗口宽度;
  • 指定 DOCTYPE,网页内容超过窗口宽度;

然后这 4 种情况要放到几个主流浏览器中,假设只有 3 种浏览器:

  • IE
  • Firefox
  • Chrome

算一下,6 * 4 * 3,有 72 种情况要测试,天啊。并且不要指望 Firefox 和 Chrome 结果是一样的,不要指望 Firefox 不会出现让您费解的结果,所以这真是一件恼火的事。

从应用入手简化分析

72 种测试情况确实很恼火,但我们回过头来一想,我们到底想要什么?

我认为我们想要两个东西:

  • 一是 scrollWidth(scrollHeight),虽然它用处不大,但应该比 offsetWidth(offsetHeight)有用得多。它表示的是文档区的宽度(高度),比如一个网页,特别是门户网站,拖很长,就要把没有显示出来的内容都计算进去。
  • 二是视口 viewport,就是 clientWidth,就是窗口中可显示内容的那块区域,就是我们常常看到页面上飞行广告,飞来飞去,碰到边边要反弹的那一块。

测试结果

结果很复杂,就不说了,这里只说实际中怎么使用:

  • 要使用 scrollWidth,取 document.documentElement.scrollWidth 与 document.body.scrollWidth 的最大值;
  • 要使用 clientWidth,如果 document.documentElement.clientWidth > 0,则使用 document.documentElement.clientWidth,否则使用 document.body.clientWidth。

表达式为:

  • var scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
  • var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
(补充:clientWidth  在框架页面frameset有问题, 在非标准页面获得的document.documentElement.clientWidth 为整个框架的高度  )


进一步可参考:http://www.cftea.com/c/751.asp

 

分享到:
评论

相关推荐

    document.body.scrollTop用法

    - **document.body.clientWidth**: 表示网页可见区域的宽度(不包含滚动条)。 - **document.body.clientHeight**: 表示网页可见区域的高度(不包含滚动条)。 - **document.body.offsetWidth**: 包含边框在内的网页...

    js获取浏览器高度和宽度值(多浏览器)

    1. `document.body.clientWidth` 和 `document.body.clientHeight` 也分别返回BODY元素的宽度和高度,与IE相同。 2. 不同的是,`document.documentElement.clientWidth` 和 `document.documentElement.clientHeight`...

    用document.documentElement取代document.body的原因分析

    例如,在Internet Explorer 6(以及更低版本)中,当页面内容超出窗口显示范围时,`document.body` 的 `scrollWidth`、`clientWidth` 和 `offsetWidth` 属性都会返回内容的实际宽度,而不是可视区域的宽度。这与其他...

    获取页面长宽和滚动条的位置

    scrW = document.body.scrollWidth; scrH = document.body.scrollHeight; } else if(document.body) { // IE Mac scrW = document.body.offsetWidth; scrH = document.body.offsetHeight; } var...

    JS获取浏览器的高度和宽度

    - `document.body.clientWidth` 和 `document.body.clientHeight` 同样返回BODY对象的宽度和高度。 - `document.documentElement.clientWidth` 和 `document.documentElement.clientHeight` 返回的是包含边距的页面...

    js中的如何定位固定层的位置.docx

    但需要注意的是,对于IE5.5及更高版本,需要特别处理`document.body.scrollLeft`和`document.documentElement.scrollLeft`,以及`document.body.scrollTop`和`document.documentElement.scrollTop`,以确保在所有...

    由document.body和document.documentElement想到的

    综上所述,理解`document.body`和`document.documentElement`以及它们与`document.compatMode`的关系,能够帮助开发者更好地处理浏览器兼容性问题,特别是涉及到CSS布局和页面尺寸计算时。同时,熟悉各种尺寸属性和...

    javascript 获取当前页面可视高度和宽度及浏览器宽度和高度的函数.pdf

    s += " 网页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)"+"\n"; // ... return s; } ``` 这个函数可以获取浏览器的宽度和高度,并将其显示在页面上。 获取当前页面的可视高度和宽度...

    关于获取各种浏览器可见窗口大小

    - **`document.body.clientWidth`** 和 **`document.body.clientHeight`**:这两个属性分别表示文档体的宽度和高度,不包含边框和滚动条。 - **`document.body.offsetWidth`** 和 **`document.body.offsetHeight`**...

    js获取屏幕分辨率的方法

    - `document.body.offsetWidth` 和 `document.body.offsetHeight` 分别表示网页可见区域的宽度和高度,包括了边线的宽度。 #### 定位相关的属性 对于精确定位的需求,JavaScript还提供了一系列属性来帮助开发者更...

    javascript 获取当前面可视高度和宽度及浏览器宽度和高度的函数.docx

    xScroll = document.body.offsetWidth; } var windowWidth; // 获取视口宽度 if (self.innerWidth) { // 除了IE外的所有浏览器 windowWidth = self.innerWidth; } else if (document.documentElement && ...

    js获取网页宽高

    - 另外,`document.body.offsetWidth` 和 `document.body.offsetHeight` 也可以获取文档的宽度和高度,但通常只适用于HTML文档的body部分,可能不包括其他非body元素的尺寸。 - 对于动态加载或滚动的内容,可能...

    js获取浏览器高度和宽度值.pdf

    - `document.body.offsetWidth` 和 `document.body.offsetHeight`: 这两个属性返回`<body>`元素的总宽度和高度,包括边框。它们可以用于获取浏览器实际显示的页面内容宽度和高度,包括边框。 - `window....

    js菜鸟笔记之图片飘动_ekom.cn

    xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; } var windowWidth, windowHeight; if (self.innerHeight) { windowWidth = self.innerWidth; windowHeight = self....

    js常用代码集锦.

    - `document.body.clientWidth`: 只包含内容区域的宽度,不包括滚动条和边框。 - `document.body.clientHeight`: 只包含内容区域的高度,不包括滚动条和边框。 - `document.body.offsetWidth`: 包括内容、内边距...

    JS浏览器的高度和宽度

    - **`document.body.offsetWidth`**: 返回 BODY 元素的实际宽度,包括边框和内边距。 - **`document.body.offsetHeight`**: 返回 BODY 元素的实际高度,包括边框和内边距。 - **`document.body.scrollWidth`**: 返回...

    doctype后如何获得body.clientHeight的方法

    `document.body` 的一些属性(如 `clientHeight`, `clientWidth`, `offsetWidth`, `offsetHeight`, `scrollWidth`, `scrollHeight`, `scrollTop`, 和 `scrollLeft`)会被重新分配给 `document.documentElement`。...

    javascript获取网页宽高方法汇总

    document.body.clientWidth – 网页可见区域宽 document.body.clientHeight – 网页可见区域高 document.body.offsetWidth – 网页可见区域宽,包括边线和滚动条的宽 document.body.offsetHeight – 网页可见区域高...

    前端vue.js

    var w = document.documentElement.clientWidth || document.body.clientWidth; var h = document.documentElement.clientHeight || document.body.clientHeight; ``` 2. **`offsetHeight` 和 `offsetWidth`** ...

Global site tag (gtag.js) - Google Analytics