问题 在砌体中随机化砖块


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

谢谢!


7497
2018-02-15 04:28


起源



答案:


我在jQuery论坛上找到了答案,并根据我的需要调整了一下。简而言之 - 你在你的masonry()持有者中拉取HTML位并随机化集合,然后你把它放回去:

  $(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
    });
  });

9
2018-04-08 02:56



我似乎无法让这个工作 - 这是否取代了html中的砌体脚本 - 是#masonry容器和.children div上的类? - mark
我不认为这可以起作用,因为砖石的性质。 - Bytemain
上面的代码段效果很好。您需要更改#masonry的所有实例以匹配您的砌体容器。此外,你可以使用$('#masonry')。masonry('reload');如果网格已经存在,则在洗牌之后。 - askon


答案:


我在jQuery论坛上找到了答案,并根据我的需要调整了一下。简而言之 - 你在你的masonry()持有者中拉取HTML位并随机化集合,然后你把它放回去:

  $(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
    });
  });

9
2018-04-08 02:56



我似乎无法让这个工作 - 这是否取代了html中的砌体脚本 - 是#masonry容器和.children div上的类? - mark
我不认为这可以起作用,因为砖石的性质。 - Bytemain
上面的代码段效果很好。您需要更改#masonry的所有实例以匹配您的砌体容器。此外,你可以使用$('#masonry')。masonry('reload');如果网格已经存在,则在洗牌之后。 - askon


我认为你的插件更合适 同位素,它的构建方式与砌体(和同一个人!)相同,但内置了排序和过滤功能


2
2018-06-14 14:49



是的,这是一个简单的$ container.isotope('shuffle');选项 :) - Systembolaget
同位素问题是它无法在没有许可证的情况下用于商业产品。 - user1429980


(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');
});

1
2018-03-23 15:01