jquery.gpCarousel.js  返回列表

// the gpCarousel plugin
(function($) {
	var methods = {
		init 					: function( options ) {
			
			if( this.length ) {
				
				var settings = {
					start	: 1,			// where to start the carousel
					speed	: 300,			// carousel sliding speed 
					easing	: 'easeOutExpo'	// carousel sliding easing 
				};
				
				return this.each(function() {
					
					// if options exist, lets merge them with our default settings
					if ( options ) {
						$.extend( settings, options );
					}
					
					var $el 			= $(this),
						$thumbs			= $el.find('div.thumbs'),
						$images			= $thumbs.children('img'),
						totalImages		= $images.length,
						imagesW			= $images.width();
					
					// insert navigation		
					$('<div class="thumbs-nav"><span class="thumbs-nav-prev">Previous</span><span class="thumbs-nav-next">Next</span></div>')
					.insertAfter( $thumbs );
						
					var	$navNext		= $el.find('span.thumbs-nav-next'),
						$navPrev		= $el.find('span.thumbs-nav-prev'),
						current			= settings.start;
					
					// confirm current boundaries
					if( totalImages <= 1 || current < 1 )
						current = 1;
					
					$el.data( 'currentImage', current );
					
					if( totalImages > 1 && current < totalImages )
						$navNext.show();
					if( totalImages > 1 && current > 1 )
						$navPrev.show();
					
					$el.css( 'width', imagesW + 'px' );
					$thumbs.css( 'width', imagesW * totalImages + 'px' );
					
					// position on thumb with index settings.start - 1
					$thumbs.css( 'margin-left', - ( current - 1 ) * imagesW + 'px' );
					
					$navNext.bind('click.gpCarousel', function(e) {
						if( $thumbs.is(':animated') || current === totalImages )
							return false;
						
						if( current === totalImages - 1 )
							$navNext.hide();
						
						$navPrev.show();
						
						$thumbs.stop().animate({
							marginLeft	: - current * imagesW + 'px'
						}, settings.speed, settings.easing, function() { ++current; $el.data( 'currentImage', current ); });
					});
					
					$navPrev.bind('click.gpCarousel', function(e) {
						if( $thumbs.is(':animated') || current === 1 )
							return false;
						
						if( current === 2 )
							$navPrev.hide();
						$navNext.show();
						
						$thumbs.stop().animate({
							marginLeft	: - ( current - 2 ) * imagesW + 'px'
						}, settings.speed, settings.easing, function() { --current; $el.data( 'currentImage', current ); });
					});
						
				});
			}
		}
	};
	
	$.fn.gpCarousel = function(method) {
		if ( methods[method] ) {
			return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
			return methods.init.apply( this, arguments );
		} else {
			$.error( 'Method ' +  method + ' does not exist on jQuery.gpCarousel' );
		}
	};
})(jQuery);
Add New Content