如何在不移动元素的情况下计算元素的位置?

时间:2013-01-09 21:05:02

标签: javascript jquery positioning

我需要改变元素的水平位置。为此,我使用left更改其.css('left', value)属性。如果没有定义left值,那么这将使元素相对于它应该移动的位置。

现在我需要重新计算将元素移动到其他位置的位置,为此,如果我没有更改其left属性,我需要元素所在的位置。

我可以移除left值并询问它的位置但是元素也会移动并且想避免这种情况,因为我可能会让元素在位置之间跳转。

我怎样才能得到元素所在的位置?

5 个答案:

答案 0 :(得分:1)

一种方法是在DOM-ready上读取元素的默认左值,并将其作为元素的data-*属性添加到元素中 - 让我们将其称为data-default-left或类似的东西。然后,当您需要进一步的默认值时,您可以始终引用该值。

使用jQuery的.data()方法可以轻松使用data-*

答案 1 :(得分:1)

如果多次更改left样式,则元素不会在位置之间跳转。只要您的函数正在运行,浏览器中就没有更新。您可以安全地重置left样式,获取位置,然后设置新的left值。

答案 2 :(得分:0)

将左侧设置为0,重新计算并将左侧设置为新位置将是您案例中最简单的更改。根据我的经验,浏览器不会在css更新之间重新绘制。

其他一些选择:

  1. 使用绝对定位而不是相对定位。然后你的起源是一致的。

  2. 使用jQuery UI position plugin。它允许您设置元素相对于另一个元素的位置。非常有用。

答案 3 :(得分:0)

如何在开始移动之前使用.data()存储此信息?那么你每次需要的时候都会把它收回来。

答案 4 :(得分:0)

简单。将初始左侧数量存储在dom加载的变量中,然后在进行其他计算时引用它:

$(function () { 

    var $element = $("#ME_ELEMENT_ID");

    var initialLeft = $element.offset().left;

    // Change your left here

    $element.css('left', '200px');

    // initialLeft still contains the old value

});