• 29-10-2012, 14:36:29
    #1
    Arkadaşlar merhaba;

    http://tympanus.net/Tutorials/ElasticSlideshow/ linkte grebileceğiniz bir jquery slideshow'umuz var. genel olarak tam aradığım şablon bu. Sadece buna bir özellik eklemek istiyorum, şöyle ki;

    Gördüğünüz gibi her slaytta bir resim mevcut, ancak bu resim sabit bir şekilde. Acaba bu resme bu linkte ikinci resimde olana benzer sağ alt tarafa doğru gayet hafif bir slide mümkün müdür?
    jquery.eislideshow.js dosyasının içeriği aşağıdaki gibidir. Buna ne eklemem gerekir ve nereye?
    (function( window, $, undefined ) {
    	
    	/*
    	* smartresize: debounced resize event for jQuery
    	*
    	* latest version and complete README available on Github:
    	* https://github.com/louisremi/jquery.smartresize.js
    	*
    	* Copyright 2011 @louis_remi
    	* Licensed under the MIT license.
    	*/
    
    	var $event = $.event, resizeTimeout;
    
    	$event.special.smartresize 	= {
    		setup: function() {
    			$(this).bind( "resize", $event.special.smartresize.handler );
    		},
    		teardown: function() {
    			$(this).unbind( "resize", $event.special.smartresize.handler );
    		},
    		handler: function( event, execAsap ) {
    			// Save the context
    			var context = this,
    				args 	= arguments;
    
    			// set correct event type
    			event.type = "smartresize";
    
    			if ( resizeTimeout ) { clearTimeout( resizeTimeout ); }
    			resizeTimeout = setTimeout(function() {
    				jQuery.event.handle.apply( context, args );
    			}, execAsap === "execAsap"? 0 : 100 );
    		}
    	};
    
    	$.fn.smartresize 			= function( fn ) {
    		return fn ? this.bind( "smartresize", fn ) : this.trigger( "smartresize", ["execAsap"] );
    	};
    	
    	$.Slideshow 				= function( options, element ) {
    	
    		this.$el			= $( element );
    		
    		/***** images ****/
    		
    		// list of image items
    		this.$list			= this.$el.find('ul.ei-slider-large');
    		// image items
    		this.$imgItems		= this.$list.children('li');
    		// total number of items
    		this.itemsCount		= this.$imgItems.length;
    		// images
    		this.$images		= this.$imgItems.find('img:first');
    		
    		/***** thumbs ****/
    		
    		// thumbs wrapper
    		this.$sliderthumbs	= this.$el.find('ul.ei-slider-thumbs').hide();
    		// slider elements
    		this.$sliderElems	= this.$sliderthumbs.children('li');
    		// sliding div
    		this.$sliderElem	= this.$sliderthumbs.children('li.ei-slider-element');
    		// thumbs
    		this.$thumbs		= this.$sliderElems.not('.ei-slider-element');
    		
    		// initialize slideshow
    		this._init( options );
    		
    	};
    	
    	$.Slideshow.defaults 		= {
    		// animation types:
    		// "sides" : new slides will slide in from left / right
    		// "center": new slides will appear in the center
    		animation			: 'sides', // sides || center
    		// if true the slider will automatically slide, and it will only stop if the user clicks on a thumb
    		autoplay			: false,
    		// interval for the slideshow
    		slideshow_interval	: 3000,
    		// speed for the sliding animation
    		speed			: 800,
    		// easing for the sliding animation
    		easing			: '',
    		// percentage of speed for the titles animation. Speed will be speed * titlesFactor
    		titlesFactor		: 0.60,
    		// titles animation speed
    		titlespeed			: 800,
    		// titles animation easing
    		titleeasing			: '',
    		// maximum width for the thumbs in pixels
    		thumbMaxWidth		: 150
        };
    	
    	$.Slideshow.prototype 		= {
    		_init 				: function( options ) {
    			
    			this.options 		= $.extend( true, {}, $.Slideshow.defaults, options );
    			
    			// set the opacity of the title elements and the image items
    			this.$imgItems.css( 'opacity', 0 );
    			this.$imgItems.find('div.ei-title > *').css( 'opacity', 0 );
    			
    			// index of current visible slider
    			this.current		= 0;
    			
    			var _self			= this;
    			
    			// preload images
    			// add loading status
    			this.$loading		= $('<div class="ei-slider-loading">Loading</div>').prependTo( _self.$el );
    			
    			$.when( this._preloadImages() ).done( function() {
    				
    				// hide loading status
    				_self.$loading.hide();
    				
    				// calculate size and position for each image
    				_self._setImagesSize();
    				
    				// configure thumbs container
    				_self._initThumbs();
    				
    				// show first
    				_self.$imgItems.eq( _self.current ).css({
    					'opacity' 	: 1,
    					'z-index'	: 10
    				}).show().find('div.ei-title > *').css( 'opacity', 1 );
    				
    				// if autoplay is true
    				if( _self.options.autoplay ) {
    				
    					_self._startSlideshow();
    				
    				}
    				
    				// initialize the events
    				_self._initEvents();
    			
    			});
    			
    		},
    		_preloadImages		: function() {
    			
    			// preloads all the large images
    			
    			var _self	= this,
    				loaded	= 0;
    			
    			return $.Deferred(
    			
    				function(dfd) {
    			
    					_self.$images.each( function( i ) {
    						
    						$('<img/>').load( function() {
    						
    							if( ++loaded === _self.itemsCount ) {
    							
    								dfd.resolve();
    								
    							}
    						
    						}).attr( 'src', $(this).attr('src') );
    					
    					});
    					
    				}
    				
    			).promise();
    			
    		},
    		_setImagesSize		: function() {
    			
    			// save ei-slider's width
    			this.elWidth	= this.$el.width();
    			
    			var _self	= this;
    			
    			this.$images.each( function( i ) {
    				
    				var $img	= $(this);
    					imgDim	= _self._getImageDim( $img.attr('src') );
    					
    				$img.css({
    					width		: imgDim.width,
    					height		: imgDim.height,
    					marginLeft	: imgDim.left,
    					marginTop	: imgDim.top
    				});
    				
    			});
    		
    		},
    		_getImageDim		: function( src ) {
    			
    			var $img    = new Image();
    							
    			$img.src    = src;
    					
    			var c_w		= this.elWidth,
    				c_h		= this.$el.height(),
    				r_w		= c_h / c_w,
    				
    				i_w		= $img.width,
    				i_h		= $img.height,
    				r_i		= i_h / i_w,
    				new_w, new_h, new_left, new_top;
    					
    			if( r_w > r_i ) {
    				
    				new_h	= c_h;
    				new_w	= c_h / r_i;
    			
    			}
    			else {
    			
    				new_h	= c_w * r_i;
    				new_w	= c_w;
    			
    			}
    					
    			return {
    				width	: new_w,
    				height	: new_h,
    				left	: ( c_w - new_w ) / 2,
    				top		: ( c_h - new_h ) / 2
    			};
    		
    		},
    		_initThumbs			: function() {
    		
    			// set the max-width of the slider elements to the one set in the plugin's options
    			// also, the width of each slider element will be 100% / total number of elements
    			this.$sliderElems.css({
    				'max-width' : this.options.thumbMaxWidth + 'px',
    				'width'		: 100 / this.itemsCount + '%'
    			});
    			
    			// set the max-width of the slider and show it
    			this.$sliderthumbs.css( 'max-width', this.options.thumbMaxWidth * this.itemsCount + 'px' ).show();
    			
    		},
    		_startSlideshow		: function() {
    		
    			var _self	= this;
    			
    			this.slideshow	= setTimeout( function() {
    				
    				var pos;
    				
    				( _self.current === _self.itemsCount - 1 ) ? pos = 0 : pos = _self.current + 1;
    				
    				_self._slideTo( pos );
    				
    				if( _self.options.autoplay ) {
    				
    					_self._startSlideshow();
    				
    				}
    			
    			}, this.options.slideshow_interval);
    		
    		},
    		// shows the clicked thumb's slide
    		_slideTo			: function( pos ) {
    			
    			// return if clicking the same element or if currently animating
    			if( pos === this.current || this.isAnimating )
    				return false;
    			
    			this.isAnimating	= true;
    			
    			var $currentSlide	= this.$imgItems.eq( this.current ),
    				$nextSlide		= this.$imgItems.eq( pos ),
    				_self			= this,
    				
    				preCSS			= {zIndex	: 10},
    				animCSS			= {opacity	: 1};
    			
    			// new slide will slide in from left or right side
    			if( this.options.animation === 'sides' ) {
    				
    				preCSS.left		= ( pos > this.current ) ? -1 * this.elWidth : this.elWidth;
    				animCSS.left	= 0;
    			
    			}	
    			
    			// titles animation
    			$nextSlide.find('div.ei-title > h2')
    					  .css( 'margin-right', 50 + 'px' )
    					  .stop()
    					  .delay( this.options.speed * this.options.titlesFactor )
    					  .animate({ marginRight : 0 + 'px', opacity : 1 }, this.options.titlespeed, this.options.titleeasing )
    					  .end()
    					  .find('div.ei-title > h3')
    					  .css( 'margin-right', -50 + 'px' )
    					  .stop()
    					  .delay( this.options.speed * this.options.titlesFactor )
    					  .animate({ marginRight : 0 + 'px', opacity : 1 }, this.options.titlespeed, this.options.titleeasing )
    			
    			$.when(
    				
    				// fade out current titles
    				$currentSlide.css( 'z-index' , 1 ).find('div.ei-title > *').stop().fadeOut( this.options.speed / 2, function() {
    					// reset style
    					$(this).show().css( 'opacity', 0 );	
    				}),
    				
    				// animate next slide in
    				$nextSlide.css( preCSS ).stop().animate( animCSS, this.options.speed, this.options.easing ),
    				
    				// "sliding div" moves to new position
    				this.$sliderElem.stop().animate({
    					left	: this.$thumbs.eq( pos ).position().left
    				}, this.options.speed )
    				
    			).done( function() {
    				
    				// reset values
    				$currentSlide.css( 'opacity' , 0 ).find('div.ei-title > *').css( 'opacity', 0 );
    					_self.current	= pos;
    					_self.isAnimating		= false;
    				
    				});
    				
    		},
    		_initEvents			: function() {
    			
    			var _self	= this;
    			
    			// window resize
    			$(window).on( 'smartresize.eislideshow', function( event ) {
    				
    				// resize the images
    				_self._setImagesSize();
    			
    				// reset position of thumbs sliding div
    				_self.$sliderElem.css( 'left', _self.$thumbs.eq( _self.current ).position().left );
    			
    			});
    			
    			// click the thumbs
    			this.$thumbs.on( 'click.eislideshow', function( event ) {
    				
    				if( _self.options.autoplay ) {
    				
    					clearTimeout( _self.slideshow );
    					_self.options.autoplay	= false;
    				
    				}
    				
    				var $thumb	= $(this),
    					idx		= $thumb.index() - 1; // exclude sliding div
    					
    				_self._slideTo( idx );
    				
    				return false;
    			
    			});
    			
    		}
    	};
    	
    	var logError 				= function( message ) {
    		
    		if ( this.console ) {
    			
    			console.error( message );
    			
    		}
    		
    	};
    	
    	$.fn.eislideshow			= function( options ) {
    	
    		if ( typeof options === 'string' ) {
    		
    			var args = Array.prototype.slice.call( arguments, 1 );
    
    			this.each(function() {
    			
    				var instance = $.data( this, 'eislideshow' );
    				
    				if ( !instance ) {
    					logError( "cannot call methods on eislideshow prior to initialization; " +
    					"attempted to call method '" + options + "'" );
    					return;
    				}
    				
    				if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
    					logError( "no such method '" + options + "' for eislideshow instance" );
    					return;
    				}
    				
    				instance[ options ].apply( instance, args );
    			
    			});
    		
    		} 
    		else {
    		
    			this.each(function() {
    			
    				var instance = $.data( this, 'eislideshow' );
    				if ( !instance ) {
    					$.data( this, 'eislideshow', new $.Slideshow( options, this ) );
    				}
    			
    			});
    		
    		}
    		
    		return this;
    		
    	};
    	
    })( window, jQuery );
    Yardımcı olursanız çok makbule geçecek. Saatlerdir uğraşıyorum.

    teşekkürler.
  • 30-10-2012, 13:01:09
    #2
    Yok mu bir hayır sever yaa.
  • 31-10-2012, 17:13:53
    #3
    Ben yaparım diyen varsa ücretli de yaptırabiliriz. Aslında çok basit bir şey olacağınız düşünüyorum ancak bir yanıt gelmedi.