【发布时间】:2013-05-16 23:15:04
【问题描述】:
我有一个 div 包含一个列表元素,这些元素具有静态定位以及我想要的每个元素
- 使用
offset()方法记录其绝对定位 - 将其位置更改为
absolute,将其移至其他位置,然后使用记录的坐标将其移回其原始位置
首先我尝试了这个:
var positions = {};
myDiv.children().each(function(){
var child = $(this);
var id = child.attr('id');
var offset = child.offset();
positions[id] = [offset.left, offset.top];
child .css('position', 'absolute');
var x = ...;
var y = ...;
child.css('left', x);
child.css('top', y);
});
console.log(positions);
在这种情况下,“位置”对象的每个条目都具有相同的坐标(第一个元素的值)。但是,如果我注释掉移动元素的位,positions 对象对于每个子对象都有正确的坐标。
所以我猜这是一个同步问题,因为在 offset 函数终止之前调用了 css 函数。
所以我真正需要的是确保块 child.css('left', x); child.css('top', y); 仅在“偏移”功能完成时执行。
我尝试过类似
$.queue(child, 'foo', function() {
var offset = $(this).offset();
positions[id] = [offset.left, offset.top];
jQuery.dequeue(this);
});
$.dequeue(child, 'foo');
child.promise().done(function() {
child.css('position', 'absolute');
...
});
但没有运气:当我记录 positions 对象时,它的坐标仍然错误。
我对 JS 和 JQuery 还很陌生,所以我知道如何在这里做正确的事情。
我如何确保块 child.css('left', x); child.css('top', y); 仅在“位置”对象填充了正确的偏移坐标后才会执行?
编辑 我刚刚意识到,在我的情况下,我需要使用 'position()' 而不是 'offset()' 但这并没有真正改变我所描述的问题
【问题讨论】:
标签: javascript jquery css xhtml promise