在砌体中随机化砖块

Posted

技术标签:

【中文标题】在砌体中随机化砖块【英文标题】:Randomize bricks in Masonry 【发布时间】:2011-06-27 08:35:40 【问题描述】:

是否可以在 JQuery 插件 Masonry 中随机化砖块,以便每次页面加载时查看不同的排列?据我所知,没有随机选项。

谢谢!

【问题讨论】:

【参考方案1】:

我认为更适合您的插件是 Isotope,它的构建方式与 Masonry 相同(并且由同一个人!),但内置了排序和过滤功能

【讨论】:

是的,有一个简单的 $container.isotope('shuffle');选项:) 同位素的问题是它不能在没有许可证的情况下用于商业产品。【参考方案2】:
(function($) 

$.fn.randomize = function(childElem) 
  return this.each(function() 
      var $this = $(this);
      var elems = $this.children(childElem);

      elems.sort(function()  return (Math.round(Math.random())-0.5); );  

      $this.remove(childElem);  

      for(var i=0; i < elems.length; i++)
        $this.append(elems[i]);      

  );    

)(jQuery);


$(window).load(function()
  $(masonry-container).randomize(masonry-brick).masonry('reload');
);

【讨论】:

【参考方案3】:

我在 jQuery 论坛上找到了答案,并根据自己的需要对其进行了一些调整。简而言之 - 您将 html 位拉入 masonry() 持有人并随机化集合,然后将其放回:

  $(document).ready(function()
    var ar = $('#masonry').children();
    ar.sort(function(a,b)
      // Get a random number between 0 and 10
      var temp = parseInt( Math.random()*10 );
      // Get 1 or 0, whether temp is odd or even
      var isOddOrEven = temp%2;
      // Get +1 or -1, whether temp greater or smaller than 5
      var isPosOrNeg = temp>5 ? 1 : -1;
      // Return -1, 0, or +1
      return( isOddOrEven*isPosOrNeg );
    );
    $('#masonry').html(ar);
    $('#masonry').masonry( 
      columnWidth:220,
      animate: true
    );
  );

【讨论】:

我似乎无法让它工作 - 这是否取代了 html 中的砌体脚本 - #masonry 是容器,.children 是 div 上的类吗? 由于砌体的性质,我认为这行不通。 上面的 sn-p 效果很好。您需要更改#masonry 的所有实例以匹配您的砌体容器。此外,您可以使用 $('#masonry').masonry('reload');如果网格已经上线,则在随机播放之后。

以上是关于在砌体中随机化砖块的主要内容,如果未能解决你的问题,请参考以下文章

随机化一个整数数组[重复]

随机化弹性盒顺序

试图随机化一个数组,但每次都保持相同的随机化[重复]

随机化在计算机中的应用:查找和搜索以及信息加密

如何在每个构建中随机化 ProGuard 字典?

分层区组随机化及R语言实现(blockrand包)