/
jq.carousel.min.js
12 lines (12 loc) · 6.88 KB
/
jq.carousel.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/*!
* jq.carousele
* Simple and customizable carousel
*
* @version 0.92
* @author nori (norimania@gmail.com)
* @copyright 5509 (http://5509.me/)
* @license The MIT License
* @link https://github.com/5509/jq.carousel
*
* 2012-02-27 01:40
*/(function(a,b){function e(a,c){var d=b,e=g(c.namespace),h=b;for(d in c){if(typeof c[d]!="function"||/(?:^_)|(?:^handleEvent$)|(?:^init$)/.test(d))continue;h=e+f(d);a[h]=function(){var a=d;return function(b){return c[a](b)}}()}}function f(a){return a.replace(/(^[a-z])/,function(a){return a.toUpperCase()})}function g(a){return a.replace(/(^[A-Z])/,function(a){return a.toLowerCase()})}function h(a,c){var d=0,e=b;/^\d+$/.test(a)&&(a=new Array(a));e=a.length;for(;d<e;d+=1)c.apply(a[d],[d].concat(arguments))}var c=function(a,b){this.namespace="Carousel";return this instanceof c?this.init(a,b):new c(a,b)};c.prototype={init:function(b,c){var d=this;d.conf=a.extend({loop:!0,easing:"swing",start:1,group:1,duration:.2,indicator:!1},c);d.$elem=b;d.$carousel_wrap=a("<div></div>");d.view_width=b[0].offsetWidth;d.total_width=0;d.current=d.conf.start;d._build();d._setIndicator();d._eventify();return d},_build:function(){var b=this,c=0,d=0;b.$items=b.$elem.find(".carousel_box");b.$items_original=b.$items.clone();b.items_length=b.$items.length;b.items_len_hidden=0;b.$elem.html(b.$carousel_wrap.html(b.$items));d=b.items_length*b.$items[0].offsetWidth;h(b.$items,function(c){var d=this;d.carousel_id=c;d.$elem=a(this);d.data_width=d.offsetWidth;d.origWidth=d.$elem.css("width");d.$elem.css({"float":"left"});if(b.items_len_hidden>b.view_width)return;b.items_len_hidden=b.items_len_hidden+d.data_width});b.item_width=b.$items.eq(0)[0].data_width;b.items_len_hidden=b.items_len_hidden/b.item_width;if(b.conf.group!==1){b._groupSetup();b.conf.loop&&b._cloneGroup()}else b.conf.loop&&b._cloneItem();b.$elem.css({overflow:"hidden",position:"relative"});if(b.conf.loop){c=b.items_len_hidden+b.current-1;b.current_pos=-c*b.item_width;b.default_pos=-b.items_len_hidden*b.item_width}else{c=b.items_length<b.conf.start?1:b.conf.start;b.current_pos=0;b.default_pos=0}b.$carousel_wrap.css({position:"absolute",left:b.current_pos+"px",height:b.$items.eq(0)[0].offsetHeight});b.max_point=b.default_pos-b.item_width*b.items_length;b.min_point=b.default_pos;b.move_size=b.item_width;b.conf.group===1?b.$items=b.$carousel_wrap.find(".carousel_box"):b.$items=b.$carousel_wrap.find(".carousel_group_inner");b._setWidth();b.$elem.trigger("carousel.ready")},_eventify:function(){var a=this,c=a.conf,d=b;if(!c.indicator)return;d=a.$indicator;a.$elem.bind({"Carousel.prev":function(){d.indicatorActive()},"Carousel.next":function(){d.indicatorActive()}})},_groupSetup:function(){var b=this,c=0,d=0,e=b.items_length,f=b.conf,g=e/f.group,h=Math.ceil(g),i=new Array(h),j=b.item_width*f.group;for(;c<e;c++){c!==0&&c%f.group===0&&(d+=1);if(!i[d]){i[d]=a('<div class="carousel_group_inner"></div>');i[d].css({"float":"left",width:j})}i[d].append(b.$items.eq(c))}for(c=0;c<h;c++)b.$carousel_wrap.append(i[c]);b.$items=b.$carousel_wrap.find(".carousel_group_inner");b.items_length=b.$items.length;b.items_len_hidden=1;b.item_width=b.item_width*f.group},_cloneItem:function(){var b=this,c=b.items_len_hidden,d=function(b,c){var d,e=this,f=[];for(d=0;d<c;d++){if(d===c)break;f.push(e.eq(b!=="<"?e.length-(1+d):d).clone())}return a(f)},e=function(){var b=[];a.each(this,function(a,c){b.unshift(c.clone())});return a(b)},f=e.call(d.call(b.$items,"<",c)),g=e.call(d.call(b.$items,">",c));h(f,function(){b.$items.eq(b.$items.length-1).after(this)});h(g,function(){b.$items.eq(0).before(this)})},_cloneGroup:function(){var a=this,b=a.items_len_hidden,c=a.$items.eq(0).clone(),d=a.$items.eq(a.items_length-1).clone();a.$items.eq(0).before(d);a.$items.eq(a.$items.length-1).after(c)},_getWidth:function(a){var c=this,d=b;c.conf.group===1?d=c.$elem.find(".carousel_box"):d=c.$elem.find(".carousel_group_inner");c.total_width=0;h(d,function(a){var b=this;b.data_width=b.offsetWidth;c.total_width=c.total_width+b.data_width})},_setWidth:function(){var a=this;a._getWidth();a.$carousel_wrap.css({width:a.total_width})},_moveState:function(){var a=this,b=a.view_width,c=a.items_length*a.item_width;return c<=b?!1:a.current===a.items_length?"max":a.current===1?"min":!0},_getNext:function(a){var b=this,c=b.conf;a+1>b.items_length?a=1:a+=1;return a},_getPrev:function(a){var b=this,c=b.conf;a-1===0?a=b.items_length:a-=1;return a},_setCurrent:function(a){var c=this,d=b,e=c.current;a?d=c._getNext(e):d=c._getPrev(e);c.current=d},_toNext:function(){var a=this,b=a.conf,c=a.items_len_hidden,d={};if(!a.conf.loop&&a.current===a.items_length)return;a._setCurrent(!0);a.current_pos=a.current_pos-a.move_size;if(a.current_pos<a.max_point){a.$carousel_wrap.css("left",a.default_pos);a.current_pos=a.default_pos-a.move_size}d.left=a.current_pos;a.$carousel_wrap.animate(d,{queue:!1,easing:b.easing,duration:b.duration*1e3,complete:function(){a.$elem.trigger("Carousel.next")}})},_toPrev:function(){var a=this,b=a.conf,c=a.items_len_hidden,d=a.items_length+c,e=a.item_width*a.items_length,f={};if(!a.conf.loop&&a.current===1)return;a._setCurrent(!1);a.current_pos=a.current_pos+a.move_size;if(a.default_pos<a.current_pos){a.$carousel_wrap.css("left",-a.item_width*d);a.current_pos=a.default_pos-e+a.move_size}f.left=a.current_pos;a.$carousel_wrap.animate(f,{queue:!1,easing:b.easing,duration:b.duration*1e3,complete:function(){a.$elem.trigger("Carousel.prev")}})},_getIndicator:function(b){var c=this,f=d(c,b),g=a('<div class="carousel_indicator"></div>');g.append(f.$elems);e(g,f);return g},_setIndicator:function(a){var b=this;if(!b.conf.indicator)return;if(!b.$indicator){b.$indicator=b._getIndicator(a);b.$elem.after(b.$indicator)}else b.$indicator.append(b.$indicator.indicatorRefresh())},indicator:function(a){var b=this;return b._getIndicator(a)},getCurrent:function(){var a=this;return a.current-1},getMoveState:function(){var a=this;return a._moveState()},prev:function(){var a=this;a._toPrev();return a.$elem},next:function(){var a=this;a._toNext();return a.$elem},reset:function(){var a=this;a.$elem.empty().append(a.$items_original);a.$elem.trigger("Carousel.reset");return a.$elem},refresh:function(){var a=this;a.total_width=0;a._build();a._setIndicator();a.$elem.trigger("Carousel.refresh");return a.$elem}};var d=function(a,b){this.namespace="Indicator";return this instanceof d?this.init(a,b):new d(a,b)};d.prototype={init:function(a,b){var c=this;c.carousel=a;c._build(b)},_build:function(b){var c=this,d=c.carousel,e=d.getCurrent(),f=0,g=d.items_length,h="",i="";for(;f<g;f++){f===e?i=' class="active"':i="";h=h+"<span"+i+">";h+=b?f:"";h+="</span>"}c.$elems=a(h)},_setActive:function(){var a=this,b=a.carousel;a.$elems.removeClass("active");a.$elems.eq(b.getCurrent()).addClass("active")},refresh:function(){var a=this;a.$elems.remove();a._build();return a.$elems},active:function(){var a=this;a._setActive()}};jQuery.carousel=c;jQuery.fn.carousel=function(a){var b=c(this,a);e(this,b);return this}})(jQuery);