jQuery的偏移最高不能正常工作(jQuery offset top doesn't wo

2019-06-27 06:37发布

我试图创建一个脚本,通过鼠标绘制一个元素的东西,我用Raphaeljs做到这一点。

对于正确的图纸,我需要找到topleftinput‍‍要素。 我使用var offset = $("#input").offset(); 获得lefttop

top的值是不正确的。 这是10px比实际更低top的距离。 我觉得10px不同分辨率,也许改变我就不能添加10px给它通常然后我想知道我怎么能解决这个问题!

我上传我的测试在这里 。

Answer 1:

jQuery的.offset()函数有此限制 :

注:jQuery的不支持获取隐藏要素的偏移坐标或占边框,边距或填充body元素的设定。

在这种情况下,身体有10px的顶部边框,这就是为什么你的图纸是关闭的10个像素。

推荐方案:

var offset = $("#input").offset();
x = x - offset.left - $(document.body).css( "border-left" );
y = y - offset.top + $(document.body).css( "border-top" );


Answer 2:

我有两个不同的解决方案:

1)可以计算出元件与总高度以上outerHeight(真)方法。 这种方法计算的高度与利润率,填充和边界。

这样就不会产生冲突 ,它将返回真值。 这里是的jsfiddle例子。

HTML

<div class="header"></div>
<div class="nav"></div>
<div class="myEle"></div>

jQuery的

var myEleTop = $('.header').outerHeight(true) + $('.nav').outerHeight(true);

2)如果定义top CSS来其相postioned在身体上的元件时,可以使用这个值也:

parseInt($('#myEle').css('top'));


Answer 3:

与此战斗了一会儿,审查各种可能的答案后,我得出的结论是jQuery的偏移量()。顶 (和它使用大概DOM API)是用于一般用途太不可靠。 它不仅是记录为排除HTML水平的利润,但它也返回其它几宗意外的结果。

位置()。上面的工作,但它可能是不实际/可能设计网页,使其等同。

幸好我发现element.getBoundingClientRect()。上面得到相对于视完美的位置。 然后,您可以添加的$(document).scrollTop()来如果需要从文件的顶部得到的位置。



文章来源: jQuery offset top doesn't work correctly