IE与FF下javascript获取网页及窗口大小的区别详解


Posted in Javascript onJanuary 14, 2014

在新定义出来的标准下 document.documentElement.clientHeight在IE和火狐里都能获取正确值,下面一篇文章详细介绍了获取各种浏览器可见窗口大小这方面的差别:

<script language="javascript">
function getInfo()
{
    var s = "";
    s += " 网页可见区域宽:"+ document.body.clientWidth;
    s += " 网页可见区域高:"+ document.body.clientHeight;
    s += " 网页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)";
    s += " 网页可见区域高:"+ document.body.offsetHeight + " (包括边线的宽)";
    s += " 网页正文全文宽:"+ document.body.scrollWidth;
    s += " 网页正文全文高:"+ document.body.scrollHeight;
    s += " 网页被卷去的高(ff):"+ document.body.scrollTop;
    s += " 网页被卷去的高(ie):"+ document.documentElement.scrollTop;
    s += " 网页被卷去的左:"+ document.body.scrollLeft;
    s += " 网页正文部分上:"+ window.screenTop;
    s += " 网页正文部分左:"+ window.screenLeft;
    s += " 屏幕分辨率的高:"+ window.screen.height;
    s += " 屏幕分辨率的宽:"+ window.screen.width;
    s += " 屏幕可用工作区高度:"+ window.screen.availHeight;
    s += " 屏幕可用工作区宽度:"+ window.screen.availWidth;
    s += " 你的屏幕设置是 "+ window.screen.colorDepth +" 位彩色";
    s += " 你的屏幕设置 "+ window.screen.deviceXDPI +" 像素/英寸";
    alert (s);
}
getInfo();
</script>

在本地测试当中:
在IE、FireFox、Opera下都可以使用
document.body.clientWidth
document.body.clientHeight
即可获得,很简单,很方便。

而在公司项目当中:
Opera仍然使用
document.body.clientWidth
document.body.clientHeight
可是IE和FireFox则使用
document.documentElement.clientWidth
document.documentElement.clientHeight

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
如果在页面中添加这行标记的话

在IE中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
在FireFox中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度

在Opera中:
document.body.clientWidth ==> 可见区域宽度
document.body.clientHeight ==> 可见区域高度
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)
document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

假设 obj 为某个 HTML 控件。

obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。

obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。

obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。

obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。

我们对前面提到的“上方或上层”与“左方或上层”控件作个说明。

例如:
<div id="tool">
      <input type="button" value="提交">
      <input type="button" value="重置">
</div>

“提交”按钮的 offsetTop 指“提交”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。
“重置”按钮的 offsetTop 指“重置”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。

“提交”按钮的 offsetLeft 指“提交”按钮距“tool”层左边框的距离,因为距其左边最近的是 “tool” 层的左边框。
“重置”按钮的 offsetLeft 指“重置”按钮距“提交”按钮右边框的距离,因为距其左边最近的是“提交”按钮的右边框。

offsetTop 可以获得 HTML 元素距离上方或外层元素的位置,style.top 也是可以的,二者的区别是:

一、offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。

二、offsetTop 只读,而 style.top 可读写。

三、如果没有给 HTML 元素指定过 top 样式,则 style.top 返回的是空字符串。

offsetLeft 与 style.left、offsetWidth 与 style.width、offsetHeight 与 style.height 也是同样道理。
IE与FF下javascript获取网页及窗口大小的区别详解

scrollHeight: 获取对象的滚动高度。 
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标

event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标 
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量 

以上主要指IE之中,FireFox差异如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height
(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

Javascript 相关文章推荐
用js自动判断浏览器分辨率的代码
Jan 28 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
JavaScript控制table某列不显示的方法
Mar 16 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
Jan 25 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
浅谈node模块与npm包管理工具
Jan 03 Javascript
微信小程序之事件交互操作实例分析
Dec 03 Javascript
JavaScript自定义日期格式化函数详细解析
Jan 14 #Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 #Javascript
JS获取各种浏览器窗口大小的方法
Jan 14 #Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
Jan 14 #Javascript
Eclipse下jQuery文件报错出现错误提示红叉
Jan 13 #Javascript
节点的插入之append()和appendTo()的用法介绍
Jan 13 #Javascript
移动节点的jquery代码
Jan 13 #Javascript
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
PHP 数组基础知识小结
2010/08/20 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
tensorflow 环境变量设置方式
2020/02/06 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
几个MySql的面试题
2013/04/22 面试题
施工材料员岗位职责
2014/02/12 职场文书
市场开发计划书
2014/05/07 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
python - timeit 时间模块
2021/04/06 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
利用Redis实现点赞功能的示例代码
2022/06/28 Redis