jQuery - 放置带偏移的div,然后再放置它=不同的结果

时间:2012-02-08 18:12:20

标签: javascript jquery offset

我正在放置一个div,通过使用另一个div id作为页面上的引用(以确保它出现在我想要的位置)。代码如下: -

$('#' + contentDiv).offset({top:($('#' + placementID).offset().top), left: ($('#' + placementID).offset().left)});

问题是,尽管每次放置ID偏移数字都相同。每当我再次调用它时,它似乎加倍并且在前一个偏移量的顶部放置一个新的左偏移量。

E.g。我在点击时调用一个函数并说,请将此div放在此放置div旁边。它做到了。用户然后退出然后再执行一次单击,并使用相同的函数将另一个div放在同一个放置div旁边。它做到了,但不是将它放在与上次相同的位置,而是将上一次的位置作为0点引用并将剩余量添加到该位置。这意味着div现在距离很远。

请注意; 我已经安排了展示位置左上角和左侧尺寸,并且每次都没有更改。

不确定发生了什么。

4 个答案:

答案 0 :(得分:5)

如果有人碰到这个问题,我已经设法通过使用css代替偏移来解决问题。即。

$('#contentDiv').css({top:placeTop,left:placeLeft});

答案 1 :(得分:0)

我猜测当您更改$('#' + contentDiv)的偏移量时,它会影响您随后调用的$('#' + placementID)的偏移量。

假设您有3个展示位置ID#1,#2和#3。

使用偏移#10,0 #20,100#30,200

然后你将#contentDiv的{​​f}设置为#1的偏移量。

现在,#contentDiv的偏移量为0,100。这会立即使您的展示位置#10,100 #20,200#30,300。这可能是什么让你失望。

答案 2 :(得分:0)

根据 http://bugs.jqueryui.com/ticket/6868 在调用.position()之前,该元素必须是可见的。 在更改我的代码以在调用offet()之前显示元素之后,它就像一个魅力。

答案 3 :(得分:0)

在使用(例如)

设置所需的偏移值之前重置属性
$(this).css('top', '').offset({top: desiredTopOffset});