2013-02-08 47 views
2

我在开发中使用Twitter Bootstrap和jQuery Masonry作为新网站。我将新元素添加到砌体容器中。jQuery砌体 - 砌体重装后的调用方法

元素既不追加或前置到现有的儿童,而是插在它们之间,根据这样的排序顺序:

var elem = $(boxes[rand2]); 
$(".post").each(function(i){ 
    if(parseFloat($(this).data("weight"))<=weight){ 
     elem.insertBefore(this); 
     return false; 
    } 
    else if (i == $(".post").length - 1) { 
     elem.insertAfter(this); 
     return false; 
    } 
}); 

此作品完美为止。我想实现的是元素只在到达目的地时才显示。我不想禁用动画,但新元素的空间应该显示(空),并且只有当所有内容都通过砌体重新排列后,新元素才会出现。

我以为会有一个回调的行动,火灾重装这样的后:

$('#posts').masonry('reload',function(){ 
    alert('re-aligning finished'); 
}); 

,但不工作了,它会提前。

所以,就目前而言,我做

$('#posts').masonry('reload',function(){ 
    window.setTimeout(showElem,500); 
}); 
function showPosts(){ 
    $('.post').show(); 
} 

而且似乎工作 - 而是一个固定的500ms的超时是不是一个真正的美丽解决方案......

那么,有什么建议?

回答

0

我猜你已经在使用jQuery了。也许使用deferred对象可能会有用。

+0

嗯看起来很有趣,但我不知道如何在这种情况下使用它... – 2013-02-08 16:08:28

+0

可以创建你正在试图解决什么的jsfiddle?我猜测.masonry函数是一个延迟对象。所以简单地与.done()绑定可能会工作...但我不知道它是否返回延迟。尝试一下 – Lucas 2013-02-08 16:15:19

+0

不幸的是,这不工作:(也许我只是坚持我的超时500毫秒,它不是*坏,但不美观 – 2013-02-08 19:00:55

0

你可以在文档加载后再做?

(function($) { 
$(document).ready(documentReadyFunction); 
$(window).resize(windowResizeFunction); 
$(window).load(windowLoadFunction); 
function documentReadyFunction() { 
    //your inserted html here 
} 
function windowResizeFunction() { 
    //resize here 
} 
function windowLoadFunction() { 
    //do masonry here 
} 
})(jQuery);