2011-12-21 22 views
1

我正在使用砌體進行佈局。當瀏覽器的窗口調整大小時,我想在砌體重新佈局之前執行一些計算。如何在砌體調整前執行代碼

到目前爲止,我已經能夠通過修改jquery.masonry.js文件並向選項添加回調函數來完成此操作。但我寧願不修改砌體代碼就這樣做。

添加的選項如下(磚石INIT):

$container.masonry({ 
    itemSelector : '.grid-element' 
    , preResizeCallback : doPreResize 
    , isResizable : true 
}); 

,然後在doPreResize做任何事情是我需要做的。在.js文件的修改是在resize功能(在版本v2.0.110927近線293):

resize : function() { 
    //added callback to be called before doing resizing-related code 
    if (this.options.preResizeCallback) 
    { 
     this.options.preResizeCallback(this.element); 
    } 
    //rest of code 

我希望做的是與isResizable選項設置爲false,然後初始化砌體手動調整半尺寸,同時保持智能尺寸調整事件。

是否可以設置「智能調整大小」事件來調用功能,如resizeLayout

function resizeLayout(event) { 
    //do precalculations 

    //tell masonry to reorganize layout 
    $container.masonry(); 
} 

我缺少的是如何設置的調整大小事件,使得它不會經常觸發,而是要做同樣的方式砌體沒有當isResizabletrue

回答

1

我可以設置事件是這樣的:

jQuery(window).bind('smartresize.masonry', function(){ 
    $container.masonry(); 
}); 

但是,失去砌體的優化,其中的磚塊只是重新排列,如果適合於容器改變的列數。如果我使用

jQuery(window).bind('smartresize.masonry', function(){ 
    $container.masonry("resize"); 
}); 

我最終使用的內部函數不是documented

0

砌體可以選擇bind /取消綁定到resize事件。

我遇到了同樣的問題,但是通過初始化masonry'unbound'到resize事件,然後編寫了一個resize函數,以相同的方式調用了這個名爲masonry的resize函數,但是在我想先執行的代碼之後。

$container.masonry({ 
    isResizeBound: false 
}); 

$(window).bind('resize', function() { 
    someFunction(); 
    $continer.masonry({ 
     isResizeBound: false 
    }); 
}); 
+0

我認爲這樣做的問題是(1)它不僅重新排列塊,而且通過調用設置函數從頭開始設置砌體(2)每次完成調整事件觸發器的大小,這是我想避免的。 (如果在不調整瀏覽器大小的情況下經過幾毫秒,'smartresize.masonry'只會觸發。 – frozenkoi 2014-02-01 07:49:01