Index: branches/1.0.x/inc/js/jquery.contentcarousel.js =================================================================== diff -u -N -r14600 -r15169 --- branches/1.0.x/inc/js/jquery.contentcarousel.js (.../jquery.contentcarousel.js) (revision 14600) +++ branches/1.0.x/inc/js/jquery.contentcarousel.js (.../jquery.contentcarousel.js) (revision 15169) @@ -1,155 +1,155 @@ -(function($) { - var cache = {}, - aux = { - // navigates left / right - navigate : function( dir, $el, $wrapper, opts ) { - var scroll = opts.scroll, - factor = 1, - idxClicked = 0; - - if( cache.expanded ) { - scroll = 1; // scroll is always 1 in full mode - factor = 3; // the width of the expanded item will be 3 times bigger than 1 collapsed item - idxClicked = cache.idxClicked; // the index of the clicked item - } - - // clone the elements on the right / left and append / prepend them according to dir and scroll - if( dir === 1 ) { - $wrapper.find('div.good-item:lt(' + scroll + ')').each(function(i) { - $(this).clone(true).css( 'left', ( cache.totalItems - idxClicked + i ) * cache.itemW * factor + 'px' ).appendTo( $wrapper ); - }); - } - else { - var $first = $wrapper.children().eq(0); - - $wrapper.find('div.good-item:gt(' + ( cache.totalItems - 1 - scroll ) + ')').each(function(i) { - // insert before $first so they stay in the right order - $(this).clone(true).css( 'left', - ( scroll - i + idxClicked ) * cache.itemW * factor + 'px' ).insertBefore( $first ); - }); - } - - // animate the left of each item - // the calculations are dependent on dir and on the cache.expanded value - $wrapper.find('div.good-item').each(function(i) { - var $item = $(this); - $item.stop().animate({ - left : ( dir === 1 ) ? '-=' + ( cache.itemW * factor * scroll ) + 'px' : '+=' + ( cache.itemW * factor * scroll ) + 'px' - }, opts.sliderSpeed, opts.sliderEasing, function() { - if( ( dir === 1 && $item.position().left < - idxClicked * cache.itemW * factor ) || ( dir === -1 && $item.position().left > ( ( cache.totalItems - 1 - idxClicked ) * cache.itemW * factor ) ) ) { - // remove the item that was cloned - $item.remove(); - } - cache.isAnimating = false; - }); - }); - - }, - // gets the item's position (1, 2, or 3) on the viewport (the visible items) - // val is the left of the item - getWinPos : function( val ) { - switch( val ) { - case 0 : return 1; break; - case cache.itemW : return 2; break; - case cache.itemW * 2 : return 3; break; - } - } - }, - methods = { - init : function( options ) { - - if( this.length ) { - - var settings = { - sliderSpeed : 500, // speed for the sliding animation - sliderEasing : 'easeOutExpo',// easing for the sliding animation - itemSpeed : 500, // speed for the item animation (open / close) - itemEasing : 'easeOutExpo',// easing for the item animation (open / close) - scroll : 1 // number of items to scroll at a time - }; - - return this.each(function() { - - // if options exist, lets merge them with our default settings - if ( options ) { - $.extend( settings, options ); - } - - var $el = $(this), - $wrapper = $el.find('div.items'), - $items = $wrapper.children('div.good-item'); - - // save the with of one item - cache.itemW = $items.width(); - // save the number of total items - cache.totalItems = $items.length; - - // add navigation buttons - if( cache.totalItems > 3 ) - $el.prepend('
ПредыдущийСледующий
') - - // control the scroll value - if( settings.scroll < 1 ) - settings.scroll = 1; - else if( settings.scroll > 3 ) - settings.scroll = 3; - - var $navPrev = $el.find('span.ca-nav-prev'), - $navNext = $el.find('span.ca-nav-next'); - - // hide the items except the first 3 - $wrapper.css( 'overflow', 'hidden' ); - - // the items will have position absolute - // calculate the left of each item - $items.each(function(i) { - $(this).css({ - position : 'absolute', - left : i * cache.itemW + 'px' - }); - }); - - // navigate left - $navPrev.bind('click.contentcarousel', function( event ) { - if( cache.isAnimating ) return false; - cache.isAnimating = true; - aux.navigate( -1, $el, $wrapper, settings ); - }); - - // navigate right - $navNext.bind('click.contentcarousel', function( event ) { - if( cache.isAnimating ) return false; - cache.isAnimating = true; - aux.navigate( 1, $el, $wrapper, settings ); - }); - - // adds events to the mouse - $el.bind('mousewheel.contentcarousel', function(e, delta) { - if(delta > 0) { - if( cache.isAnimating ) return false; - cache.isAnimating = true; - aux.navigate( -1, $el, $wrapper, settings ); - } - else { - if( cache.isAnimating ) return false; - cache.isAnimating = true; - aux.navigate( 1, $el, $wrapper, settings ); - } - return false; - }); - - }); - } - } - }; - - $.fn.contentcarousel = 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.contentcarousel' ); - } - }; - +(function($) { + var cache = {}, + aux = { + // navigates left / right + navigate : function( dir, $el, $wrapper, opts ) { + var scroll = opts.scroll, + factor = 1, + idxClicked = 0; + + if( cache.expanded ) { + scroll = 1; // scroll is always 1 in full mode + factor = 3; // the width of the expanded item will be 3 times bigger than 1 collapsed item + idxClicked = cache.idxClicked; // the index of the clicked item + } + + // clone the elements on the right / left and append / prepend them according to dir and scroll + if( dir === 1 ) { + $wrapper.find('div.good-item:lt(' + scroll + ')').each(function(i) { + $(this).clone(true).css( 'left', ( cache.totalItems - idxClicked + i ) * cache.itemW * factor + 'px' ).appendTo( $wrapper ); + }); + } + else { + var $first = $wrapper.children().eq(0); + + $wrapper.find('div.good-item:gt(' + ( cache.totalItems - 1 - scroll ) + ')').each(function(i) { + // insert before $first so they stay in the right order + $(this).clone(true).css( 'left', - ( scroll - i + idxClicked ) * cache.itemW * factor + 'px' ).insertBefore( $first ); + }); + } + + // animate the left of each item + // the calculations are dependent on dir and on the cache.expanded value + $wrapper.find('div.good-item').each(function(i) { + var $item = $(this); + $item.stop().animate({ + left : ( dir === 1 ) ? '-=' + ( cache.itemW * factor * scroll ) + 'px' : '+=' + ( cache.itemW * factor * scroll ) + 'px' + }, opts.sliderSpeed, opts.sliderEasing, function() { + if( ( dir === 1 && $item.position().left < - idxClicked * cache.itemW * factor ) || ( dir === -1 && $item.position().left > ( ( cache.totalItems - 1 - idxClicked ) * cache.itemW * factor ) ) ) { + // remove the item that was cloned + $item.remove(); + } + cache.isAnimating = false; + }); + }); + + }, + // gets the item's position (1, 2, or 3) on the viewport (the visible items) + // val is the left of the item + getWinPos : function( val ) { + switch( val ) { + case 0 : return 1; break; + case cache.itemW : return 2; break; + case cache.itemW * 2 : return 3; break; + } + } + }, + methods = { + init : function( options ) { + + if( this.length ) { + + var settings = { + sliderSpeed : 500, // speed for the sliding animation + sliderEasing : 'easeOutExpo',// easing for the sliding animation + itemSpeed : 500, // speed for the item animation (open / close) + itemEasing : 'easeOutExpo',// easing for the item animation (open / close) + scroll : 1 // number of items to scroll at a time + }; + + return this.each(function() { + + // if options exist, lets merge them with our default settings + if ( options ) { + $.extend( settings, options ); + } + + var $el = $(this), + $wrapper = $el.find('div.items'), + $items = $wrapper.children('div.good-item'); + + // save the with of one item + cache.itemW = $items.width(); + // save the number of total items + cache.totalItems = $items.length; + + // add navigation buttons + if( cache.totalItems > 3 ) + $el.prepend('
ПредыдущийСледующий
') + + // control the scroll value + if( settings.scroll < 1 ) + settings.scroll = 1; + else if( settings.scroll > 3 ) + settings.scroll = 3; + + var $navPrev = $el.find('span.ca-nav-prev'), + $navNext = $el.find('span.ca-nav-next'); + + // hide the items except the first 3 + $wrapper.css( 'overflow', 'hidden' ); + + // the items will have position absolute + // calculate the left of each item + $items.each(function(i) { + $(this).css({ + position : 'absolute', + left : i * cache.itemW + 'px' + }); + }); + + // navigate left + $navPrev.bind('click.contentcarousel', function( event ) { + if( cache.isAnimating ) return false; + cache.isAnimating = true; + aux.navigate( -1, $el, $wrapper, settings ); + }); + + // navigate right + $navNext.bind('click.contentcarousel', function( event ) { + if( cache.isAnimating ) return false; + cache.isAnimating = true; + aux.navigate( 1, $el, $wrapper, settings ); + }); + + // adds events to the mouse + $el.bind('mousewheel.contentcarousel', function(e, delta) { + if(delta > 0) { + if( cache.isAnimating ) return false; + cache.isAnimating = true; + aux.navigate( -1, $el, $wrapper, settings ); + } + else { + if( cache.isAnimating ) return false; + cache.isAnimating = true; + aux.navigate( 1, $el, $wrapper, settings ); + } + return false; + }); + + }); + } + } + }; + + $.fn.contentcarousel = 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.contentcarousel' ); + } + }; + })(jQuery); \ No newline at end of file