`
zccst
  • 浏览: 3319880 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

document.body、document.documentElement和window获取视窗大小的区别

阅读更多
作者:zccst

参考网址:http://www.ido321.com/906.html

2015-3-27
$(window).height(); 才是窗口的宽高,而且一直不变
document.body.clientHeight,在文档内容有滚动条的时候远大于$(window).height();

实际例子,向下滑动判断
$(document).height() - $(window).scrollTop() - $(window).height() < 150



2015-3-17

踩了一个大坑,在UC浏览器,window.innerHeight与document.body.clientHeight根本不相等,导致获取错误的高度。
结论:直接使用document.body.clientHeight即可。


另外,screen.availHight是屏幕分辨率1920x1080之类,并不是屏幕viewport尺寸。




一、理论
在w3school关于window对象的介绍中,介绍了获取浏览器窗口大小的三种方法(浏览器的视口,不包括工具栏和滚动条)。

对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:
window.innerHeight – 浏览器窗口的内部高度
window.innerWidth – 浏览器窗口的内部宽度


对于 Internet Explorer 8、7、6、5:
document.documentElement.clientHeight
document.documentElement.clientWidth
或者
document.body.clientHeight
document.body.clientWidth


二、测试办法

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Cache-Control" content="no-cache">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta name="MobileOptimized" content="320">
<title>Document</title>

<style type="text/css">
.test
 {
        width:100px;
       height:100px;
       background:red;
   }
   #data
   {
       width:200px;
       height:100px;
}
</style>
</head>
<body>
<div class="test">test</div>
<div id="data"></div>
<script type="text/javascript">
var w=window.innerWidth
    || document.documentElement.clientWidth
    || document.body.clientWidth;
    var h=window.innerHeight
    || document.documentElement.clientHeight
    || document.body.clientHeight;
   
    var data = document.getElementById('data');
	data.innerHTML = "正常文档流情况:"+"<br/>";
   data.innerHTML += "h="+h+"<br/>";
   data.innerHTML += "w="+w+"<br/>";
   data.innerHTML += "document.body.clientHeight="+document.body.clientHeight+"<br/>";
   data.innerHTML += "document.body.clientWidth="+document.body.clientWidth+"<br/>";
   data.innerHTML += "window.innerWidth="+window.innerWidth+"<br/>";
   data.innerHTML += "window.innerHeight="+window.innerHeight+"<br/>";
   data.innerHTML += "document.documentElement.clientHeight="+document.documentElement.clientHeight+"<br/>";
   data.innerHTML += "document.documentElement.clientWidth="+document.documentElement.clientWidth+"<br/>";
</script>
</body>
</html>


结果(例子):
正常文档流情况:
h=652
w=1280
document.body.clientHeight=200
document.body.clientWidth=1264
window.innerWidth=1280
window.innerHeight=652
document.documentElement.clientHeight=652
document.documentElement.clientWidth=1280


经测试结论1:
document.body.clientWidth/Height:的宽高偏小,高甚至默认200。
document.documentElement.clientWidth/Height 和 window.innerWidth/Height 的宽高始终相等。


测试结论2:
给.test添加左浮动:float:left,让其脱离正常文档流,看看结果:除了document.body.clientHeight变成了100,其他基本保持不变。


测试结论3:
但是给.data也添加float:left,在对应的浏览器中,document.body.clientHeight变成了0,其他基本保持不变。不信可以自己试试。



三、如何使用知识来改进
1,向显示在移动端怎么办?
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

2,如果希望clientWidth/Height与 documentElement.clientWidth、innerWidth 一样怎么办?
设置如下css
body {
height: 100%;
overflow: hidden;
}
body, div, p, ul {
margin: 0;
padding: 0;
}
最关键的是:body的height:100%影响document.body.clientHeight的值。
body的margin:0,padding:0影响document.body.clientWidth的值。

所以,需要js+css才能得到正确的结果。
分享到:
评论

相关推荐

    火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题

    在探讨“火狐、谷歌、IE关于`document.body.scrollTop`和`document.documentElement.scrollTop`以及值为0的问题”这一主题时,我们深入分析了浏览器在处理页面滚动位置时的不同行为,尤其是当滚动位置值始终为0时的...

    document.body.scrollTop用法

    - 使用 `event.clientX` 和 `event.clientY` 获取鼠标相对于视口的位置,但若想得到相对于整个文档的位置,则需加上 `document.documentElement.scrollTop` 或 `document.documentElement.scrollLeft`。 ```...

    document.body属性.document.body.scrollTop

    3. **与window对象的scrollY区别**:虽然 `window.scrollY` 和 `document.body.scrollTop` 在很多情况下结果相同,但它们并不完全等价。`window.scrollY` 返回的是整个窗口(包括顶部固定元素)相对于浏览器顶部的...

    Document.body.scrollTop的值总为零的快速解决办法

    在标准模式下,浏览器倾向于使用`document.documentElement.scrollTop`来获取页面的滚动位置,而不是`document.body.scrollTop`。 `document.documentElement` 指的是HTML文档的根元素,即`&lt;html&gt;`标签。在标准模式...

    javascript 获取网页高度宽度.pdf

    它通过 `Math.max()` 函数取 `document.body.scrollHeight` 和 `document.documentElement.scrollHeight` 的最大值来获取这个值。 ```javascript function getScrollHeight() { return Math.max(document.body....

    解决VUE中document.body.scrollTop为0的问题

    当开发者试图使用document.body.scrollTop来获取当前滚动条位置时,可能会遇到这个值一直返回0的情况。这种现象特别容易在不同浏览器之间出现兼容性问题,尤其在使用DOCTYPE声明时,不同浏览器可能有着不同的表现。 ...

    document.documentElement &amp;&amp; document.documentElement.scrollTop

    在JavaScript中,`document.documentElement` 和 `document.documentElement.scrollTop` 是两个非常重要的属性,它们与网页文档的DOM(Document Object Model)交互,特别是涉及到页面滚动时的行为。本文将深入讲解...

    由document.body和document.documentElement想到的

    在Web开发中,理解和掌握`document.body`和`document.documentElement`的区别至关重要,尤其是在处理页面布局和兼容性问题时。这两个对象分别代表了HTML文档的不同部分:`document.body`指的是HTML文档的实际内容...

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

    JavaScript 获取当前页面可视高度和宽度及浏览器宽度和高度的函数 在Web开发中,获取当前页面的可视高度和宽度,以及浏览器的宽度和高度是非常重要的。这篇文章将为大家讲解如何使用JavaScript来获取这些信息。 ...

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

    } else if(document.body.scrollHeight &gt; document.body.offsetHeight) { // all but IE Mac scrW = document.body.scrollWidth; scrH = document.body.scrollHeight; } else if(document.body) { /...

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

    但在W3C标准模式下(如XHTML文档),`document.body.scrollTop`通常返回0,此时应使用`document.documentElement.scrollTop`和`document.documentElement.scrollLeft`来获取正确的滚动值。 以下是一段具有良好兼容...

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

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

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

    对于W3C的标准,`document.documentElement.clientWidth` 和 `document.documentElement.clientHeight` 应该返回浏览器窗口的可视区域大小,但不同浏览器的实现有所差异。在没有定义标准的情况下,IE返回0,而Fire...

    js获取屏幕分辨率的方法

    这可以通过`window.innerWidth`和`window.innerHeight`或`document.documentElement.clientWidth`和`document.documentElement.clientHeight`来实现。 ```javascript // 获取浏览器窗口的宽度 var windowWidth = ...

    document.body.scrollTop 值总为0的解决方法 比较常见的标准问题

    在标准模式下,IE和Firefox等现代浏览器倾向于遵循W3C标准,其中规定应该使用`document.documentElement.scrollTop`来获取整个页面的滚动位置,而不是`document.body.scrollTop`。因此,当你尝试通过`document.body....

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

    通过条件语句判断浏览器支持的滚动位置获取方式,既考虑了现代浏览器的 `window.pageYOffset` 和 `window.pageXOffset`,也考虑了老式浏览器的 `document.documentElement.scrollTop` 和 `document.body.scrollTop`...

    js获取文本框的值!js获取浏览器高度和宽度值.pdf

    `document.body.offsetWidth` 可以获取网页可见区域的宽度,包括边线的宽,`document.body.offsetHeight` 可以获取网页可见区域的高度,包括边线的高。 2. 使用 `document.documentElement` 对象: 在 IE 中,`...

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

    - `document.body.offsetWidth` 和 `document.body.offsetHeight` 会包括边框和内填充,用于获取网页实际显示的宽度和高度。 - `document.body.scrollWidth` 和 `document.body.scrollHeight` 分别表示网页的完整...

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

    - `document.body.clientHeight` 和 `document.body.clientWidth`:其他IE版本和其他浏览器使用。 #### 五、实际应用 在实际开发中,通常还需要考虑以下几点: 1. **性能优化**:频繁调用这些函数可能会对页面...

    Javascript 获取页面高度(多种浏览器)

    首先,我们有两个基本属性可以用来获取页面的宽度和高度:`document.body.clientWidth` 和 `document.body.clientHeight`。这两个属性分别返回 `&lt;body&gt;` 元素的宽度和高度,不包括滚动条。在 IE、Firefox 和 Opera ...

Global site tag (gtag.js) - Google Analytics