2013-02-26 91 views
2

我試圖實現isotope庫,所以元素排序我的菜單。經過一些研究和工具後,我選擇將同位素容器中的第一個元素設置爲菜單項。然後,我將它過濾掉,直到過濾或排序爲止。同位素度假村沒有移動第一個元素

我選擇了這種方法,而不是角落戳方法,因爲角落標記的限制只對元素有正確的理由(從我的理解 - 我可能會錯過使用它雖然..)。我希望菜單位於左上角。

我遇到的問題是洗牌。我試圖隨機化所有元素的位置,除了第一個元素(在本例中是菜單)。我想保留菜單。當我嘗試使用隨機播放來隨機重新排列所有元素時,我無法從可用列表中濾除我的菜單項以進行隨機播放。這導致一些導航..問題,當子導航決定飛走。

下面是一個例子佈局:http://jsfiddle.net/ufomammut66/xwpuk/30/

到目前爲止,我已經試過:$('.container').isotope('shuffle');

此功能只有1個參數 - 一個回調。我不明白我在這裏如何操縱選擇過程。

我考慮過使用排序功能,但由於某種原因,我不能得到: $('.container').isotope({ sortBy : 'random' });不止一次發射。即使我做了,我仍然沒有看到如何利用這個來濾除我的菜單。

任何幫助將不勝感激,謝謝!

編輯:更新jsFiddle鏈接,包括可排序對象上的數字 - 有助於顯示排序工作。

編輯2:增加了更多的細節問題。

回答

1

我認爲同位素緩存會進行排序,所以它不必重新計算它已經完成的排序。它甚至在「隨機」看來這樣做。

一個修復程序/黑客是reloadItems隨機排序後:

$('#reorder').click(function() { 
    $('.container').isotope({sortBy: 'random'}).isotope('reloadItems'); 
}); 

演示:http://jsfiddle.net/nT66r/

用於過濾的菜單項,隨機只返回一個隨機數,所以沒有很多你可以做。然而,你可以寫一個自定義的隨機排序這將讓您「過濾器」菜單:

getSortData: { 
    name: function ($elem) { 
     return $elem.data('name'); 
    }, 
    myrandom: function ($elem) { 
     if($elem.hasClass('menu')) { 
      return -1; 
     } 
     return Math.random(); 
    } 
} 

演示:http://jsfiddle.net/PvnMn/

注意,因爲menu是一類,你會把自己暴露給一些可能的怪事如果有多個menu項目。如果你只有一個,ID是一個更好的選擇。在這種情況下,您將使用$elem.is('#menu')而不是$elem.hasClass('menu')

隨着#menuhttp://jsfiddle.net/PvnMn/1/

這裏是我的刺版本在過濾其他種類:http://jsfiddle.net/jtbowden/Vuqgu/

+0

這似乎並不爲我工作。它在我第一次嘗試時就奏效了,但隨後的排序和頁面加載時又重新排序。 雖然知道的很好,但我沒有意識到它緩存了各種值。 – ShortRound1911 2013-02-27 14:31:46

+0

是不是應該隨機重新排序?對不起,我不清楚你有什麼問題。 – 2013-02-27 18:21:09

+0

對於模糊的問題抱歉。我試圖洗牌所有元素,但第一個元素(菜單)。所以我希望菜單作爲第一個元素保持原位,並讓所有其他同位素元素隨機重新排序。爲了清楚起見,我稍微更新了這個問題。 – ShortRound1911 2013-02-27 19:51:42