2013-02-08 48 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);