我遇到了一个非常奇怪的问题,我已经设法解决了这个问题,但是却以令人作呕的方式。
我有以下工作代码,用于抓取元素的左侧和顶部(使用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
的情况下进行类似修复?或者这是最好的方式。
我试图尽可能地解释我的问题,但这有点奇怪。所以对任何问题发表评论。
感谢您提出任何建议。
答案 0 :(得分:0)
我有理由相信(我不确定,因为你没有提到float: left
)你遇到了与this question中相同的问题,我已经彻底回答了这个问题。
简而言之,您需要首先在所有元素上设置top
和left
。完成后,在所有元素上设置position: absolute
。