2013-02-26 52 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