`

【转】js获取元素位置 和 窗口高度,用来手动设定div高度

阅读更多
先吧代码贴在这里,有时间或者需要用的时候方便。。。


关于获取各种浏览器可见窗口大小的一点点研究。

在我本地测试当中:
在IE、FireFox、Opera下都可以使用
document.body.clientWidth
document.body.clientHeight
即可获得,很简单,很方便。
而在公司项目当中:
Opera仍然使用
document.body.clientWidth
document.body.clientHeight
可是IE和FireFox则使用
document.documentElement.clientWidth
document.documentElement.clientHeight
原来是W3C的标准在作怪啊
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高)
而如果没有定义W3C的标准,则
IE为:
document.documentElement.clientWidth ==> 0
document.documentElement.clientHeight ==> 0
FireFox为:
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)
Opera为:
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)
真是一件麻烦事情,其实就开发来看,宁可少一些对象和方法,不使用最新的标准要方便许多啊。

  用Javascript获取指定页面元素的位置是一个非常常见的需求,本文介绍的函数能够准确返回一个元素相对于整个文档左上角的坐标,即元素的 top 、left 的位置,而且能够兼容浏览器,相信对新手非常有用。


function getElementPos(elementId) {
 var ua = navigator.userAgent.toLowerCase();
 var isOpera = (ua.indexOf('opera') != -1);
 var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
 var el = document.getElementById(elementId);
 if(el.parentNode === null || el.style.display == 'none') {
  return false;
 }      
 var parent = null;
 var pos = [];     
 var box;     
 if(el.getBoundingClientRect)    //IE
 {         
  box = el.getBoundingClientRect();
  var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
  var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
  return {x:box.left + scrollLeft, y:box.top + scrollTop};
 }else if(document.getBoxObjectFor)    // gecko    
 {
  box = document.getBoxObjectFor(el); 
  var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0; 
  var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0; 
  pos = [box.x - borderLeft, box.y - borderTop];
 } else    // safari & opera    
 {
  pos = [el.offsetLeft, el.offsetTop];  
  parent = el.offsetParent;     
  if (parent != el) { 
   while (parent) {  
    pos[0] += parent.offsetLeft; 
    pos[1] += parent.offsetTop; 
    parent = parent.offsetParent;
   }  
  }   
  if (ua.indexOf('opera') != -1 || ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )) { 
   pos[0] -= document.body.offsetLeft;
   pos[1] -= document.body.offsetTop;         
  }    
 }              
 if (el.parentNode) { 
    parent = el.parentNode;
   } else {
    parent = null;
   }
 while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled ancestors
  pos[0] -= parent.scrollLeft;
  pos[1] -= parent.scrollTop;
  if (parent.parentNode) {
   parent = parent.parentNode;
  } else {
   parent = null;
  }
 }
 return {x:pos[0], y:pos[1]};
}

使用示例

var pos=getElementPos("divId");
alert("距左边距离"+ pos.x +",距上边距离"+pos.y);

h=window.screen.height;
y=window.screenTop;
ie=h-y;
alert(h + '-' + y + '=' + ie);
分享到:
评论

相关推荐

    js实现的瀑布流

    4. **兼容性处理**:考虑到不同浏览器的差异,可能需要使用`getBoundingClientRect`或`offsetHeight`等方法获取元素的位置和尺寸,并根据需要使用`setTimeout`或`requestAnimationFrame`来优化性能和用户体验。...

    百度地图JavaScriptAPI离线版.zip

    9. **地理围栏(Geofence)**:可以设定一个地理区域,当用户进入或离开该区域时触发相应的事件,常用于位置监控和提醒。 10. **离线地图**:离线版API通常会包含预加载的地图瓦片数据,这样在无网络的情况下,地图...

    全屏自适应百叶窗动画切换js代码.zip

    可以使用`window.innerWidth`和`window.innerHeight`获取窗口尺寸,并根据这些尺寸动态计算每个小块的宽高。同时,可以监听`resize`事件,当窗口尺寸发生变化时,重新计算并调整元素布局。 4. **动画逻辑**:百叶窗...

    js实现的图片轮播器效果

    在JS中,获取HTML元素,如图片容器、按钮和指示器,然后将图片链接或DOM元素添加到容器中。初始化当前索引通常设为0。 4. **事件监听**: 给“上一张”和“下一张”按钮添加点击事件监听器,当点击时更新当前索引...

    瀑布流加载模式样例

    这通常通过遍历所有内容项,比较其顶部位置和当前列的最大高度来完成。如果当前列的高度不够,就将其放入下一行。 6. **延迟加载(Lazy Loading)优化**:为了提高性能和减少初始加载时间,可以使用延迟加载技术。...

    jQuery无限加载瀑布流.zip

    同时,HTML5的`data-*`属性可以用来存储额外的信息,如元素的原始宽度和高度,方便JavaScript处理。 总结来说,实现jQuery无限加载瀑布流的过程主要包括以下几个步骤: 1. 使用jQuery监听滚动事件,判断是否达到...

    中国万网首页js幻灯图片切换广告代码

    在中国万网首页上,为了吸引用户的注意力并展示多样化的信息,经常使用js(JavaScript)实现的幻灯片图片切换效果。这种技术是网页动态设计的重要组成部分,它可以为用户提供更丰富的交互体验,同时提升网站的视觉...

    jQuery网页自适应屏幕图片滚动切换

    结合`.width()`和`.height()`函数,我们可以获取窗口或元素的尺寸,以确保图片始终填充容器,或者保持其宽高比缩放。 为了创建一个完整的图片轮播,我们需要考虑以下几个关键组件: 1. 图片容器:一个包含所有图片...

    jquery自适应分组缩略图.rar

    在JavaScript部分,我们可以通过`.each()`遍历每个缩略图组,使用`.width()`获取当前窗口宽度,再根据图片的数量和设定的间距计算每个组的总宽度,最后用`.css('width')`设置新宽度。 此外,还可以使用jQuery的动画...

    yochat-v-3.0:添加了模拟配置文件,可滚动div,自动滚动,消息图像,随机消息系统1-7,切换自动滚动,滚动至底部按钮,主题选择器,yoCHAT? 语音聊天等等!

    【yochat-v-3.0】是一款基于JavaScript开发的实时聊天应用的更新版本,它在原有的基础上增加了一系列新功能,旨在提供更加丰富和个性化的用户体验。以下将详细阐述这个版本中的关键知识点: 1. **模拟配置文件**:...

Global site tag (gtag.js) - Google Analytics