如何使用Javascript来计算页面元素的偏移量

本文将向您展示如何使用Javascript来计算页面元素的偏移量。需要帮助的朋友可以参考它。





问题

通过单击控件并在控件下显示一个浮动层,通常的方法是获得控件的偏移值,然后计算浮动层的CSS属性(如顶部和左边)的值,并分配它。

然后让我们看看如何获得控件的偏移值。

纯js的实现

首先要考虑的是这样一个js。
复制代码代码如下所示:
document.getelementbyid(divfloat)。风格。最高document.getelementbyid(按钮)。offsetleft + 25;

当您发现需要添加一个值单位时,将其更改为以下内容:

IETester和Firefox复检,IE6 +可以做。与以前一样,纯js方法被Firefox无情地鄙视,所获得的值是不正确的。

在互联网上,它应该是这样写的,通过循环,层向上和向上,最后得到确切的偏移值。


复制代码代码如下所示:
功能getoffsetleft(O)
{
var = 0;
无功offsetparent = O;
而(offsetparent!= null offsetparent!=文档体)
{
左= offsetparent.offsetleft;
offsetparent = offsetparent.offsetparent;
}
返回左;
}


实现jquery

在对相关问题的进一步审查中,发现jQuery包含了一个实现此功能的函数:偏移量(),它与各种浏览器兼容得很好。
复制代码代码如下所示:
$(#按钮)。偏移(左)。

下载源代码后,发现jQuery已经实现。
复制代码代码如下所示:
JQuery.fn.extend({
位置:函数(){
如果(!{ { 0 }){
返回null;
}
var elem =这{ 0 },
*真实* offsetparent / /得到
offsetparent = this.offsetparent(),
正确的偏移量
偏移量= this.offset(),
parentoffset = / ^体| HTML $ / i.test(offsetparent { 0 },{顶:0形式),左:0 }:offsetparent.offset();
元素边距 /减去
注意:当一个元素有缘: /汽车offsetleft和marginleft
同样是在Safari造成 / offset.left错误0
offset.top = parseFloat(jquery.curcss(元素,margintop,真的)| |)0;
offset.left = parseFloat(jquery.curcss(元素,marginleft,真的)| |)0;
offsetparent国界 / /添加
parentoffset.top = parseFloat(jquery.curcss(offsetparent { 0 },bordertopwidth,真的)| |)0;
parentoffset.left = parseFloat(jquery.curcss(offsetparent { 0 },borderleftwidth,真的)| |)0;
两个偏移量
返回{
上图:offset.top - parentoffset.top,
左:offset.left - parentoffset.left
};
},
offsetparent:函数(){
返回this.map(函数(){()
无功offsetparent = this.offsetparent document.body | |;
而(offsetparent(! / ^体| HTML $ / i.test(offsetparent。nodeName)jquery.css(offsetparent,位置)=静态)){
offsetparent = offsetparent.offsetparent;
}
返回offsetparent;
});
}
});

计算的方式非常相似,但有一点需要注意的是:

偏移()函数的计算不包括边距值(但包含边界值)。