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 相关文章推荐
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
May 19 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
Javascript优化技巧之短路表达式详细介绍
Mar 27 Javascript
js拖拽功能实现代码解析
Nov 28 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
vue综合组件间的通信详解
Nov 06 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
微信小程序利用Canvas绘制图片和竖排文字详解
Jun 25 Javascript
vue.js实现简单购物车功能
May 30 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
php中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
php单一接口的实现方法
2015/06/20 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
javascript globalStorage类代码
2009/06/04 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
python如何写个俄罗斯方块
2020/11/06 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
internal修饰符起什么作用
2013/12/16 面试题
应届生自我鉴定
2013/12/11 职场文书
电子商务应届生自我鉴定
2014/01/13 职场文书
《乞巧》教学反思
2014/02/27 职场文书
十八届三中全会感言
2014/03/10 职场文书
工作岗位说明书模板
2014/05/09 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
2014年质检工作总结
2014/11/26 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android