我试图创建一个脚本,通过鼠标绘制一个元素的东西,我用Raphaeljs
做到这一点。
对于正确的图纸,我需要找到top
和left
的input
要素。 我使用var offset = $("#input").offset();
获得left
和top
。
但top
的值是不正确的。 这是10px
比实际更低top
的距离。 我觉得10px
不同分辨率,也许改变我就不能添加10px
给它通常然后我想知道我怎么能解决这个问题!
我上传我的测试在这里 。
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" );
我有两个不同的解决方案:
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'));
与此战斗了一会儿,审查各种可能的答案后,我得出的结论是jQuery的偏移量()。顶 (和它使用大概DOM API)是用于一般用途太不可靠。 它不仅是记录为排除HTML水平的利润,但它也返回其它几宗意外的结果。
位置()。上面的工作,但它可能是不实际/可能设计网页,使其等同。
幸好我发现element.getBoundingClientRect()。上面得到相对于视完美的位置。 然后,您可以添加的$(document).scrollTop()来如果需要从文件的顶部得到的位置。