昨天给添加了在线测试效果!打开后发现JS弹出框位置和效果不对!但是我在我本地测试是没问题的!仔细检查后发现原来是由于博客园的HTML文档类型和我的不一样。

我的是:<!DOCTYPE html>

博客园:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

关于HTML文档类型参考:http://i.wanz.im/2010/05/28/why_doctype_html/

检查发现JS在获取当前页面可视大小,和页面位置有差别!
在页面包含一个2000*2000的DIV是IE和Chrome在不同HTML文档类型测试整理数据如下:
标准:<!DOCTYPE html>
特殊:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

当HTML中未添加HTML文档类型时,默认为特殊模式!

Chrome标准 Chrome特殊 IE标准 IE特殊
document.body.clientTop; 0 0 0 2
document.body.clientLeft; 0 0 0 2
document.body.clientWidth; 473 473 471 471
document.body.clientHeight; 2000 625 2000 604
document.body.scrollTop; 224 289 0 255
document.body.scrollLeft; 315 388 0 278
document.body.scrollWidth; 2005 2005 2005 2010
document.body.scrollHeight; 2010 2010 2000 2005
document.body.offsetTop; 0 0 0 0
document.body.offsetLeft; 0 0 0 0
document.body.offsetWidth; 473 473 471 492
document.body.offsetHeight; 2000 2000 2000 625
document.documentElement.clientTop; 0 0 0 0
document.documentElement.clientLeft; 0 0 0 0
document.documentElement.clientWidth; 473 473 471 0
document.documentElement.clientHeight; 625 2010 604 0
document.documentElement.scrollTop; 0 0 199 0
document.documentElement.scrollLeft; 0 0 241 0
document.documentElement.scrollWidth; 2005 2005 2005 492
document.documentElement.scrollHeight; 2010 2010 2010 625
document.documentElement.offsetTop; 0 0 0 0
document.documentElement.offsetLeft; 0 0 0 0
document.documentElement.offsetWidth; 473 473 492 492
document.documentElement.offsetHeight; 2010 2010 625 625

分析:

页面总宽度:document.body.scrollWidth;
页面总高度:document.body.scrollHeight;
Chrome页面位置:document.body.scrollTop; document.body.scrollLeft;
Chrome标准页面可视区域:document.documentElement.clientWidth; document.documentElement.clientHeight;
Chrome特殊页面可视区域:document.body.clientWidth; document.body.clientHeight;
IE标准页面位置:document.documentElement.scrollTop; document.documentElement.scrollLeft;
IE标准页面可视区域:document.documentElement.clientWidth; document.documentElement.clientHeight;
IE特殊页面位置:document.body.scrollTop; document.body.scrollLeft;
IE特殊页面可视区域:document.body.clientWidth; document.body.clientHeight;
JS代码如下:

 
function getSize() {
var obj = new Object();
obj.allWidth = document.body.scrollWidth;
obj.allHeight = document.body.scrollHeight;
if (-[1, ]) { //非IE
obj.top = document.body.scrollTop;
obj.left = document.body.scrollLeft;
if (document.compatMode === 'CSS1Compat') {
obj.width = document.documentElement.clientWidth;
obj.height = document.documentElement.clientHeight;
}
else {
obj.width = document.body.clientWidth;
obj.height = document.body.clientHeight;
}
} else {
if (document.compatMode === 'CSS1Compat') {
obj.width = document.documentElement.clientWidth;
obj.height = document.documentElement.clientHeight;
obj.top = document.documentElement.scrollTop;
obj.left = document.documentElement.scrollLeft;
}
else {
obj.width = document.body.clientWidth;
obj.height = document.body.clientHeight;
obj.top = document.body.scrollTop;
obj.left = document.body.scrollLeft;
}
}
alert(obj.top);
alert(obj.left);
alert(obj.width);
alert(obj.height);
return obj;
}

注:发现博客园首页的HTML文档类型为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
为什么和随笔展示页不一样呢?

欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ]

最新资讯
微信“戒烟”背后:北京市控烟协会曾给马化腾写信

微信“戒烟”背后:北京

北京市控烟协会就一直跟踪和关注此事,腾讯公司的这个决
飞车要来了?吉利科技沃飞长空:2024年前后投放中国市场

飞车要来了?吉利科技沃

打到一辆空中出租车还要多久?或许三年后就可以通过吉利
2021年“全球十大突破性技术”公布:mRNA疫苗、多技能AI等上榜

2021年“全球十大突破

日前,《麻省理工科技评论》2021“全球十大突破性技术”
引入深圳国资战略股东,苏宁易购还在张近东手里

引入深圳国资战略股东

2月28日晚,苏宁易购发布公告表示,公司引入深国际、鲲鹏
疯狂的赌徒,货拉拉创始人的神秘发家史

疯狂的赌徒,货拉拉创始

对公司经营行为负有最大责任的CEO周胜馥,到底是怎么发
最新文章
详解HTML中字体使用line-height依然不能垂直居中解决办法

详解HTML中字体使用li

这篇文章主要介绍了详解HTML中字体使用line-height依
html直接引用vue和element-ui的方法

html直接引用vue和ele

这篇文章主要介绍了html直接引用vue和element-ui的方
在HTML里加载摄像头的方法

在HTML里加载摄像头的

这篇文章主要介绍了如何在HTML里加载摄像头,本文通过实
html父子页面iframe双向发消息的实现示例

html父子页面iframe双

这篇文章主要介绍了html父子页面iframe双向发消息的实
HTML用户注册页面设置源码

HTML用户注册页面设置

这篇文章主要介绍了HTML用户注册页面设置源码,代码简
当div设置contentEditable=true时,重置其内容后无法光标定位

当div设置contentEdit

这篇文章主要介绍了解决当div设置contentEditable=tru