`
zccst
  • 浏览: 3291871 次
  • 性别: 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才能得到正确的结果。
分享到:
评论

相关推荐

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

    } 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) { /...

    javascript scrollTop正解使用方法

    在实际应用中经常会遇到以下问题:document.documentElement.scrollTop在Chrome里总为0document.body.scrollTop 在IE和firefox里总为01、各浏览器下 window.pageYOffset/document.documentElement.scrollTop/...

    javascript获取网页宽高方法汇总

    document.body.offsetWidth – 网页可见区域宽,包括边线和滚动条的宽 document.body.offsetHeight – 网页可见区域高,包括边线和滚动条的高[FF,chrom下是整个页面高,IE opera 下正常] document.body.scrollWidth ...

    取得窗口大小 兼容所有浏览器的js代码

    取得窗口大小的代码: 代码如下: var pageWidth = window.innerWidth, var pageHeight = window.innerHeight; if(typeof pageWidth != “number”){ if(document.compatMode == “number”){ pageWidth = document....

    【JavaScript源代码】vue实现锚点定位功能.docx

     Chrome: document.body.scrollTop Firefox: document.documentElement.scrollTop Safari: window.pageYOffset  我这里是局部元素滚动,因此稍有差异。先附上html及css代码块: scroll-content为滚动区域, ...

    Js与Jq获取浏览器和对象值的方法

    JS and Jquery 都能获取页面元素的宽度,高度和相对位移等数值,那他们之间能相互转换或替代吗,写法又有哪些差异呢?本文将详细为你介绍。 1.Js获取浏览器高度和宽度 document.documentElement.clientWidth ==&gt; ...

    各种 javascript 弹出层 div

    document.body.appendChild(back); clearInterval(prox); clearInterval(proy); clearInterval(proxc); clearInterval(proyc); var o = document.getElementById(id); o.style.display = "block"; o.style...

    Js与Jq 获取页面元素值的方法和差异对比

    JS与Jquery 都能获取页面元素的宽度,高度和相对位移等数值,那他们之间能相互转换或替代吗,写法又有哪些差异呢?本文将详细为你介绍。 1.Js获取浏览器高度和宽度 document.documentElement.clientWidth ==&gt; ...

    index.html

    let maxH = document.documentElement.clientHeight - 50, maxW = document.documentElement.clientWidth - 50; //监听resize,改变maxH,maxW window.onresize = function(){ maxH = document....

    javascript 获取页面的高度及滚动条的位置的代码

    代码如下: var Viewport={ top : function(){ return window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop; }, height : function(){ return window...

    js检查是否关闭浏览器的方法

    本文实例讲述了js检查是否关闭浏览器的方法。分享给大家供大家参考,具体如下: //关闭浏览器提示信息 ... document.body.clientHeight : 0, document.documentElement ? document.documentElement.clientHeight :

    JS关闭窗口时产生的事件及用法示例

    本文实例讲述了JS关闭... var pageWidth = Math.max(window.top.document.body.scrollWidth, window.top.document.documentElement.scrollWidth); var pageHeight = Math.max(window.top.document.body.scrollHeight,

    echarts大屏字体自适应的方法步骤

    用echarts做大屏可视化的时候会遇到不是用电脑投屏而是直接在大屏打开的情况,这时候大屏幕下... clientWidth = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth; if (!client

    JavaScript获取鼠标坐标的函数(兼容IE、FireFox、Chrome)

    还好网上什么都有,上网找了一个浏览器兼容性最佳的函数,经测试... return { x:e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft, y:e.clientY+document.body.scrollTop+document.document

    移动端 日期,树...等控件的js插件

    h = document.documentElement, b = k.replace(/./, function (a) { return a[0].toUpperCase() }); return void 0 === n ? this[0] == window ? h['client' + b] : this[0] == document ? Math.max(c['scroll'...

    CSS3毛玻璃效果(blur)有白边问题的解决方法

    做一个登录页,全屏背景图毛玻璃效果,实现方法如下: ... var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;  var h = window.innerHeight || document.do

    js使用小技巧

    获取选中内容 document.selection.createRange().duplicate().text 自动完成功能 打开该功能 关闭该功能 窗口最大化 &lt;body onload="window.resizeTo(window.screen.width - 4,window.screen.height-50);...

    jQuery 弹窗对话框拖动 非插件

    posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; } gapx = (posx-...

    js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法

    如下所示: screen.width ...window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight //宽度 window.innerWidth || document.documentElement.clientWidth || docum

    原生javascript实现图片滚动、延时加载功能

     img.getBoundingClientRect().top + document.body.scrollTop||document.documentElement.scrollTop (3)判断img出现的位置是否在可见区域里:  .在浏览器的可见区域,justTop&gt;scrollTop&&offsetTop&lt;...

Global site tag (gtag.js) - Google Analytics