将位置设置为绝对后,元素位置发生变化

时间:2011-09-02 11:09:37

标签: javascript html css

我遇到了一个非常奇怪的问题,我已经设法解决了这个问题,但是却以令人作呕的方式。

我有以下工作代码,用于抓取元素的左侧和顶部(使用MooTools)。然后使用setStyles将这些测量坐标复制到样式属性中。这非常有效。

但是,只要我将位置设置为绝对值,上面代码中的值就会发生变化。

工作但可怕:

var Sortable = new Class({
    initialize: function(element, container) {
        // Store the element and its settings
        this.element = element;
        this.size = element.getSize();
        this.position = element.getPosition(container);

        // Set the position
        element.setStyles({
            left: this.position.x,
            top: this.position.y
        });

        setTimeout(this.goAbsolute.bind(this), 0);
    },
    goAbsolute: function() {
        this.element.setStyle('position', 'absolute');
    }
});

如您所见,我使用超时来分隔左/上设置和位置设置。以下代码不起作用。

var Sortable = new Class({
    initialize: function(element, container) {
        // Store the element and its settings
        this.element = element;
        this.size = element.getSize();
        this.position = element.getPosition(container);

        // Set the position
        element.setStyles({
            left: this.position.x,
            top: this.position.y,
            position: 'absolute'
        });
    }
});

所以,我们可以使用它。

this.size = element.getSize();

例如size.x等于100。然后添加这一行。

this.size = element.getSize();
element.setStyle('position', 'absolute');

size.x现在等于0.即使它在之后被设置为绝对。

我尝试克隆对象及其值。

我试过把它们全部放在彼此的范围之外。

似乎没什么用。

有没有人知道如何在不使用setTimeout的情况下进行类似修复?或者这是最好的方式。

我试图尽可能地解释我的问题,但这有点奇怪。所以对任何问题发表评论。

感谢您提出任何建议。

1 个答案:

答案 0 :(得分:0)

我有理由相信(我不确定,因为你没有提到float: left)你遇到了与this question中相同的问题,我已经彻底回答了这个问题。

简而言之,您需要首先在所有元素上设置topleft。完成后,在所有元素上设置position: absolute