同位素 - 组合过滤器,随机排序

Isotope - combinend filters, sort random

我正在使用同位素 (Metafizzy) 来过滤我网站上的元素。我已经组合了过滤器,现在我想添加一个 'sort-by-random' 和 'original-order'。过滤器工作正常,但不是随机排序。有人可以给我提示或知道它是如何工作的吗?

这是一个代码笔示例:http://codepen.io/webronin411/pen/zxNLwr

$(function() {
  // init Isotope
  var $container = $('.isotope').isotope({
    itemSelector: '.color-shape'
  });

  // store filter for each group
  var filters = {};

  $('#filters').on('click', '.button', function() {
    var $this = $(this);
    // get group key
    var $buttonGroup = $this.parents('.button-group');
    var filterGroup = $buttonGroup.attr('data-filter-group');
    // set filter for group
    filters[filterGroup] = $this.attr('data-filter');
    // combine filters
    var filterValue = '';
    for (var prop in filters) {
      filterValue += filters[prop];
    }
    // set filter for Isotope
    $container.isotope({
      filter: filterValue
    });
  });


  // bind sort button click
  $('#sorts').on('click', 'button', function() {
    var sortByValue = $(this).attr('data-sort-by');
    $container.isotope({
      sortBy: sortByValue
    });
  });




  // change is-checked class on buttons
  $('.button-group').each(function(i, buttonGroup) {
    var $buttonGroup = $(buttonGroup);
    $buttonGroup.on('click', 'button', function() {
      $buttonGroup.find('.is-checked').removeClass('is-checked');
      $(this).addClass('is-checked');
    });
  });

});
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
body {
  font-family: sans-serif;
}
/* ---- button ---- */

.button {
  display: inline-block;
  padding: 0.5em 1.0em;
  background: #EEE;
  border: none;
  border-radius: 7px;
  background-image: linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.2));
  color: #222;
  font-family: sans-serif;
  font-size: 16px;
  text-shadow: 0 1px white;
  cursor: pointer;
}
.button:hover {
  background-color: #8CF;
  text-shadow: 0 1px hsla(0, 0%, 100%, 0.5);
  color: #222;
}
.button:active,
.button.is-checked {
  background-color: #28F;
}
.button.is-checked {
  color: white;
  text-shadow: 0 -1px hsla(0, 0%, 0%, 0.8);
}
.button:active {
  box-shadow: inset 0 1px 10px hsla(0, 0%, 0%, 0.8);
}
/* ---- button-group ---- */

.button-group:after {
  content: '';
  display: block;
  clear: both;
}
.button-group .button {
  float: left;
  border-radius: 0;
  margin-left: 0;
  margin-right: 1px;
}
.button-group .button:first-child {
  border-radius: 0.5em 0 0 0.5em;
}
.button-group .button:last-child {
  border-radius: 0 0.5em 0.5em 0;
}
/* ---- isotope ---- */

.isotope {
  background: #DDD;
  max-width: 1200px;
}
/* clear fix */

.isotope:after {
  content: '';
  display: block;
  clear: both;
}
/* ui group */

.ui-group {
  display: inline-block;
}
.ui-group h3 {
  display: inline-block;
  vertical-align: top;
  line-height: 32px;
  margin-right: 0.2em;
  font-size: 16px;
}
.ui-group .button-group {
  display: inline-block;
  margin-right: 20px;
}
/* color-shape */

.color-shape {
  width: 70px;
  height: 70px;
  margin: 5px;
  float: left;
}
.color-shape.round {
  border-radius: 35px;
}
.color-shape.big.round {
  border-radius: 75px;
}
.color-shape.red {
  background: red;
}
.color-shape.blue {
  background: blue;
}
.color-shape.yellow {
  background: yellow;
}
.color-shape.wide,
.color-shape.big {
  width: 150px;
}
.color-shape.tall,
.color-shape.big {
  height: 150px;
}
<script src="http://isotope.metafizzy.co/beta/isotope.pkgd.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="filters">

  <div class="ui-group">
    <h3>Color</h3>
    <div class="button-group js-radio-button-group" data-filter-group="color">
      <button class="button is-checked" data-filter="">any</button>
      <button class="button" data-filter=".red">red</button>
      <button class="button" data-filter=".blue">blue</button>
      <button class="button" data-filter=".yellow">yellow</button>
    </div>
  </div>

  <div class="ui-group">
    <h3>Size</h3>
    <div class="button-group js-radio-button-group" data-filter-group="size">
      <button class="button is-checked" data-filter="">any</button>
      <button class="button" data-filter=".small">small</button>
      <button class="button" data-filter=".wide">wide</button>
      <button class="button" data-filter=".big">big</button>
      <button class="button" data-filter=".tall">tall</button>
    </div>
  </div>

  <div class="ui-group">
    <h3>Sort</h3>
    <div class="button-group js-radio-button-group" id="sorts">
      <button class="button is-checked" data-sort-by="original-order">original</button>
      <button class="button" data-sort-by="random">random</button>
    </div>
  </div>




</div>

<div class="isotope">
  <div class="color-shape small round red"></div>
  <div class="color-shape small round blue"></div>
  <div class="color-shape small round yellow"></div>
  <div class="color-shape small square red"></div>
  <div class="color-shape small square blue"></div>
  <div class="color-shape small square yellow"></div>
  <div class="color-shape wide round red"></div>
  <div class="color-shape wide round blue"></div>
  <div class="color-shape wide round yellow"></div>
  <div class="color-shape wide square red"></div>
  <div class="color-shape wide square blue"></div>
  <div class="color-shape wide square yellow"></div>
  <div class="color-shape big round red"></div>
  <div class="color-shape big round blue"></div>
  <div class="color-shape big round yellow"></div>
  <div class="color-shape big square red"></div>
  <div class="color-shape big square blue"></div>
  <div class="color-shape big square yellow"></div>
  <div class="color-shape tall round red"></div>
  <div class="color-shape tall round blue"></div>
  <div class="color-shape tall round yellow"></div>
  <div class="color-shape tall square red"></div>
  <div class="color-shape tall square blue"></div>
  <div class="color-shape tall square yellow"></div>
</div>

希望有人能帮助我,thx

R

这是因为您的#sorts div 在您的#filters div 之内。这里有一个 codepen 把它们分开了。我会把 css 的过滤器排序栏留给你。

  <div id="filters">
 <div class="ui-group">
  <h3>Color</h3>
  <div class="button-group js-radio-button-group" data-filter-group="color">
  <button class="button is-checked" data-filter="">any</button>
  <button class="button" data-filter=".red">red</button>
  <button class="button" data-filter=".blue">blue</button>
  <button class="button" data-filter=".yellow">yellow</button>
  </div>
  </div>

  <div class="ui-group">
  <h3>Size</h3>
  <div class="button-group js-radio-button-group" data-filter-group="size">
  <button class="button is-checked" data-filter="">any</button>
  <button class="button" data-filter=".small">small</button>
  <button class="button" data-filter=".wide">wide</button>
  <button class="button" data-filter=".big">big</button>
  <button class="button" data-filter=".tall">tall</button>
 </div>
 </div>
 </div>
 <div class="ui-group">
 <h3>Sort</h3>
 <div class="button-group js-radio-button-group" id="sorts" >
   <button class="button is-checked" data-sort-by="original-order">original</button>
  <button class="button" data-sort-by="random">random</button>
</div>
</div>
</div>