Bonjour à tous,

J'essaye d'implémenter Mixitup, un plugin pour jquery, mais je rencontre un petit problème.
Par défaut Mixitup permet de filtrer les éléments en rajoutant la class 'filter' comme cela :

  <ul>
         <li class="filter" data-filter="dogs"> </ li>
         <li class="filter" data-filter="cats"> </ li>
         <li class="filter" data-filter="krakens"> </ li>
         <li class="filter" data-filter="dogs cats"> </ li>
    </ul>

Il est précisé que de manière alternative on peut filtrer les éléments directement en javascript comme cela.

  Syntax: $ ('# Grid') mixitup ('filter', 'dogs').


Mais personnellement je voudrais utiliser un menu déroulant trouvé sur codrop (http://tympanus.net/codrops/2012/11/29/simple-effects-for-drop-down-lists/) pour filtrer les éléments.
Le problème c'est que cela utilise une balise <select> et que cela ne fonctionne pas en rajoutant le class="filter". Lorsque je clique sur une catégorie, cela n'a aucune action.

Je voudrais donc avoir quelque chose de ce type

<select id="cd-dropdown" name="cd-dropdown" class="cd-select">
    <option value=""> SELECT CATEGORY </ option>
    <option value="mix"> ALL </ option>
    <option value="cat0"> CAT 0 </ option>
    <option value="cat1"> CAT 1 </ option>
    <option value="cat2"> CAT 2 </ option>
    <option value="cat3"> CAT 3 </ option>
    </ select>`


Voici le script du menu déroulant que j'aimerais implémenter :


     ;( function( $, window, undefined ) {
    
    	'use strict';
    
    	$.DropDown = function( options, element ) {
    		this.$el = $( element );
    		this._init( options );
    	};
    
    	// the options
    	$.DropDown.defaults = {
    		speed : 300,
    		easing : 'ease',
    		gutter : 0,
    		// initial stack effect
    		stack : true,
    		// delay between each option animation
    		delay : 0,
    		// random angle and positions for the options
    		random : false,
    		// rotated [right||left||false] : the options will be rotated to thr right side or left side.
    		// make sure to tune the transform origin in the stylesheet
    		rotated : false,
    		// effect to slide in the options. value is the margin to start with
    		slidingIn : false,
    		onOptionSelect : function(opt) { return false; }
    	};
    
    	$.DropDown.prototype = {
    
    		_init : function( options ) {
    
    			// options
    			this.options = $.extend( true, {}, $.DropDown.defaults, options );
    			this._layout();
    			this._initEvents();
    
    		},
    		_layout : function() {
    
    			var self = this;
    			this.minZIndex = 1000;
    			var value = this._transformSelect();
    			this.opts = this.listopts.children( 'li' );
    			this.optsCount = this.opts.length;
    			this.size = { width : this.dd.width(), height : this.dd.height() };
    			
    			var elName = this.$el.attr( 'name' ), elId = this.$el.attr( 'id' ),
    				inputName = elName !== undefined ? elName : elId !== undefined ? elId : 'cd-dropdown-' + ( new Date() ).getTime();
    
    			this.inputEl = $( '<input type="hidden" name="' + inputName + '" value="' + value + '"></input>' ).insertAfter( this.selectlabel );
    			
    			this.selectlabel.css( 'z-index', this.minZIndex + this.optsCount );
    			this._positionOpts();
    			if( Modernizr.csstransitions ) {
    				setTimeout( function() { self.opts.css( 'transition', 'all ' + self.options.speed + 'ms ' + self.options.easing ); }, 25 );
    			}
    
    		},
    		_transformSelect : function() {
    
    			var optshtml = '', selectlabel = '', value = 1;
    			this.$el.children( 'option' ).each( function() {
    
    				var $this = $( this ),
    					val = isNaN( $this.attr( 'value' ) ) ? $this.attr( 'value' ) : Number( $this.attr( 'value' ) ) ,
    					classes = $this.attr( 'class' ),
    					selected = $this.attr( 'selected' ),
    					label = $this.text();
    
    				if( val !== 1 ) {
    					optshtml += 
    						classes !== undefined ? 
    							'<li data-value="' + val + '"><span class="' + classes + '">' + label + '</span></li>' :
    							'<li data-value="' + val + '"><span>' + label + '</span></li>';
    				}
    
    				if( selected ) {
    					selectlabel = label;
    					value = val;
    				}
    
    			} );
    
    			this.listopts = $( '<ul/>' ).append( optshtml );
    			this.selectlabel = $( '<span/>' ).append( selectlabel );
    			this.dd = $( '<div class="cd-dropdown"/>' ).append( this.selectlabel, this.listopts ).insertAfter( this.$el );
    			this.$el.remove();
    
    			return value;
    
    		},
    		_positionOpts : function( anim ) {
    
    			var self = this;
    
    			this.listopts.css( 'height', 'auto' );
    			this.opts
    				.each( function( i ) {
    					$( this ).css( {
    						zIndex : self.minZIndex + self.optsCount - 1 - i,
    						top : self.options.slidingIn ? ( i + 1 ) * ( self.size.height + self.options.gutter ) : 0,
    						left : 0,
    						marginLeft : self.options.slidingIn ? i % 2 === 0 ? self.options.slidingIn : - self.options.slidingIn : 0,
    						opacity : self.options.slidingIn ? 0 : 1,
    						transform : 'none'
    					} );
    				} );
    
    			if( !this.options.slidingIn ) {
    				this.opts
    					.eq( this.optsCount - 1 )
    					.css( { top : this.options.stack ? 9 : 0, left : this.options.stack ? 4 : 0, width : this.options.stack ? this.size.width - 8 : this.size.width, transform : 'none' } )
    					.end()
    					.eq( this.optsCount - 2 )
    					.css( { top : this.options.stack ? 6 : 0, left : this.options.stack ? 2 : 0, width : this.options.stack ? this.size.width - 4 : this.size.width, transform : 'none' } )
    					.end()
    					.eq( this.optsCount - 3 )
    					.css( { top : this.options.stack ? 3 : 0, left : 0, transform : 'none' } );
    			}
    
    		},
    		_initEvents : function() {
    			
    			var self = this;
    			
    			this.selectlabel.on( 'mousedown.dropdown', function( event ) {
    				self.opened ? self.close() : self.open();
    				return false;
    
    			} );
    
    			this.opts.on( 'click.dropdown', function() {
    				if( self.opened ) {
    					var opt = $( this );
    					self.options.onOptionSelect( opt );
    					self.inputEl.val( opt.data( 'value' ) );
    					self.selectlabel.html( opt.html() );
    					self.close();
    				}
    			} );
    
    		},
    		open : function() {
    			var self = this;
    			this.dd.toggleClass( 'cd-active' );
    			this.listopts.css( 'height', ( this.optsCount + 1 ) * ( this.size.height + this.options.gutter ) );
    			this.opts.each( function( i ) {
    
    				$( this ).css( {
    					opacity : 1,
    					top : self.options.rotated ? self.size.height + self.options.gutter : ( i + 1 ) * ( self.size.height + self.options.gutter ),
    					left : self.options.random ? Math.floor( Math.random() * 11 - 5 ) : 0,
    					width : self.size.width,
    					marginLeft : 0,
    					transform : self.options.random ?
    						'rotate(' + Math.floor( Math.random() * 11 - 5 ) + 'deg)' :
    						self.options.rotated ?
    							self.options.rotated === 'right' ?
    								'rotate(-' + ( i * 5 ) + 'deg)' :
    								'rotate(' + ( i * 5 ) + 'deg)'
    							: 'none',
    					transitionDelay : self.options.delay && Modernizr.csstransitions ? self.options.slidingIn ? ( i * self.options.delay ) + 'ms' : ( ( self.optsCount - 1 - i ) * self.options.delay ) + 'ms' : 0
    				} );
    
    			} );
    			this.opened = true;
    
    		},
    		close : function() {
    
    			var self = this;
    			this.dd.toggleClass( 'cd-active' );
    			if( this.options.delay && Modernizr.csstransitions ) {
    				this.opts.each( function( i ) {
    					$( this ).css( { 'transition-delay' : self.options.slidingIn ? ( ( self.optsCount - 1 - i ) * self.options.delay ) + 'ms' : ( i * self.options.delay ) + 'ms' } );
    				} );
    			}
    			this._positionOpts( true );
    			this.opened = false;
    
    		}
    
    	}
    
    	$.fn.dropdown = function( options ) {
    		var instance = $.data( this, 'dropdown' );
    		if ( typeof options === 'string' ) {
    			var args = Array.prototype.slice.call( arguments, 1 );
    			this.each(function() {
    				instance[ options ].apply( instance, args );
    			});
    		}
    		else {
    			this.each(function() {
    				instance ? instance._init() : instance = $.data( this, 'dropdown', new $.DropDown( options, this ) );
    			});
    		}
    		return instance;
    	};
    
        } )( jQuery, window );



J'ai trouvé quelqu'un sur le forum qui avait réussi a intégrer fancyselect, qui utilise aussi la balaies select.
Il a créé ce code :

	$(".tags").fancySelect().on("selectlabel",function(){
			item = $(this).val();
			$('#grid-items').mixitup('filter',item);
		});


Mais je ne comprends pas comment il a fait Smiley biggol .

Voici un lien github vers son travail.

https://github.com/hasinhayder/ResponsiveGalleryWithFiltering


Je vous remercie d'avance, j'aimerais que quelqu'un m'aide, mais également m'explique sa méthode si possible.

Smiley lol

Cordialement,

Jetel