Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 5th, 2012  |  syntax: None  |  size: 2.89 KB  |  hits: 35  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. jquery isotope - sort, layout AND multiple filters
  2. <div class="option-combo">
  3.   <h2>Filter:</h2>
  4.   <ul id="filter" class="option-set clearfix" data-option-key="filter">
  5.     <li><a href="#show-all" data-option-value="*" class="selected">show all</a></li>
  6.     <li><a href="#elements" data-option-value=".element:not(.feature)">elements</a></li>
  7.     <li><a href="#features" data-option-value=".feature">features</a></li>
  8.     <li><a href="#examples" data-option-value=".example">examples</a></li>
  9.   </ul>
  10. </div>
  11.  
  12. <div class="option-combo">
  13.   <h2>Sort:</h2>
  14.   <ul id="sort" class="option-set clearfix" data-option-key="sortBy">
  15.   <li><a href="#sortBy=original-order" data-option-value="original-order" data>original-order</a></li>
  16.   <li><a href="#sortBy=name" data-option-value="name">name</a></li>
  17.   <li><a href="#sortBy=year" data-option-value="year" class="selected">year</a></li>
  18.   <li><a href="#sortBy=size" data-option-value="size">size</a></li>
  19.   <li><a href="#sortBy=random" data-option-value="random">random</a></li>
  20.   </ul>
  21. </div>
  22.  
  23. <div class="option-combo">
  24.   <h2>Layout: </h2>
  25.   <ul id="layouts" class="option-set clearfix" data-option-key="layoutMode">
  26.     <li><a href="#masonry" data-option-value="masonry" class="selected">masonry</a></li>
  27.     <li><a href="#fitRows" data-option-value="fitRows">fitRows</a></li>
  28.     <li><a href="#straightDown" data-option-value="straightDown">straightDown</a></li>
  29.   </ul>
  30. </div>
  31.        
  32. $(function(){
  33.  
  34.   var $container = $('#container');
  35.  
  36.   $container.isotope({
  37.     masonry: {
  38.       columnWidth: 70
  39.     },
  40.     sortBy: 'year',
  41.     sortAscending : false,
  42.     getSortData: {
  43.       name : function ( $elem ) {
  44.         return $elem.find('.name').text();
  45.       },
  46.       size : function ( $elem ) {
  47.         return parseInt( $elem.find('.Size').text().replace( /,/g, ''), 10 );
  48.       },
  49.       year : function ( $elem ) {
  50.         return parseInt( $elem.find('.year').text().replace( /,/g, ''), 10 );
  51.       }
  52.     }
  53.   });
  54.  
  55.  
  56.   var $optionSets = $('#options .option-set'),
  57.       $optionLinks = $optionSets.find('a');
  58.  
  59.   $optionLinks.click(function(){
  60.     var $this = $(this);
  61.     // don't proceed if already selected
  62.     if ( $this.hasClass('selected') ) {
  63.       return false;
  64.     }
  65.     var $optionSet = $this.parents('.option-set');
  66.     $optionSet.find('.selected').removeClass('selected');
  67.     $this.addClass('selected');
  68.  
  69.     // make option object dynamically, i.e. { filter: '.my-filter-class' }
  70.     var options = {},
  71.         key = $optionSet.attr('data-option-key'),
  72.         value = $this.attr('data-option-value');
  73.     // parse 'false' as false boolean
  74.     value = value === 'false' ? false : value;
  75.     options[ key ] = value;
  76.     if ( key === 'layoutMode' && typeof changeLayoutMode === 'function' ) {
  77.       // changes in layout modes need extra logic
  78.       changeLayoutMode( $this, options )
  79.     } else {
  80.       // otherwise, apply new options
  81.       $container.isotope( options );
  82.     }
  83.  
  84.     return false;
  85.   });
  86.  
  87. });