/** * @name jQuery.touchSlider * @author dohoons ( http://dohoons.com/ ) * * @version 201506 * @since 201106 * * @param Object settings 환경변수 오브젝트 * roll - 순환 (default true) * flexible - 유동 레이아웃 (default false) * view - 다중 컬럼 (default 1) * speed - 애니메이션 속도 (default 75) * range - 넘김 판정 범위 (default 0.15) * page - 초기 페이지 (default 1) * transition - CSS3 transition 사용 (default true) * btn_prev - prev 버튼 (jQuery Object, default null) * btn_next - next 버튼 (jQuery Object, default null) * paging - page 버튼 (jQuery Object, default null) * sidePage - 사이드 페이지 사용 (default false) * initComplete - 초기화 콜백 * counter - 슬라이드 콜백, 카운터 * * @example $("#target").touchSlider({ flexible : true }); */ (function ($) { $.fn.touchSlider = function (settings) { settings.supportsCssTransitions = (function (style) { var prefixes = ['Webkit','Moz','Ms']; for(var i=0, l=prefixes.length; i < l; i++ ) { if( typeof style[prefixes[i] + 'Transition'] !== 'undefined') { return true; } } return false; })(document.createElement('div').style); settings = jQuery.extend({ roll : true, flexible : false, btn_prev : null, btn_next : null, paging : null, speed : 500, view : 1, range : 0.15, page : 1, auto_slide : 0, auto_slide_time : 1, sidePage : false, transition : true, initComplete : null, counter : null }, settings); var opts = []; opts = $.extend({}, $.fn.touchSlider.defaults, settings); return this.each(function () { var _this = this; $.fn.extend(this, touchSlider); this.opts = opts; this.init(); $(window).bind("orientationchange resize", function () { _this.resize(_this); }); }); }; var touchSlider = { init : function () { var _this = this; this._view = this.opts.view; this._speed = this.opts.speed; this._tg = $(this); this._list = this._tg.children().children(); this._width = parseInt(this._tg.css("width")); this._item_w = parseInt(this._list.css("width")); this._len = this._list.length; this._range = this.opts.range * this._width; this._autoSlide = this.opts.auto_slide; this._autoSlideTime = this.opts.auto_slide_time; this._pos = []; this._start = []; this._startX = 0; this._startY = 0; this._left = 0; this._top = 0; this._drag = false; this._scroll = false; this._btn_prev; this._btn_next; this._btn_start; this._btn_stop; $(this) .unbind("touchstart", this.touchstart) .unbind("touchmove", this.touchmove) .unbind("touchend", this.touchend) .unbind("dragstart", this.touchstart) .unbind("drag", this.touchmove) .unbind("dragend", this.touchend) .bind("touchstart", this.touchstart) .bind("touchmove", this.touchmove) .bind("touchend", this.touchend) .bind("dragstart", this.touchstart) .bind("drag", this.touchmove) .bind("dragend", this.touchend) $(this).children().css({ "width":this._width + "px", "overflow":"visible" }); if(this.opts.flexible) this._item_w = this._width / this._view; if(this.opts.roll) { if(this._len % this._view > 0) { var blank = $(document.createElement(this._list.eq(0).eq(0).prop("tagName"))).hide(); var cnt = this._view - (this._len % this._view); for(var i=0; i 1 && this.opts.page <= this._len) ? (this.opts.page - 1) * this._item_w : 0; for(var i=0; i -1 ) { e.stopPropagation(); } else { e.preventDefault(); } this._drag = true; this._scroll = false; this.position(e); } for(var i=0; i gap) this._left = gap; if(this._left < - gap) this._left = - gap; } if(this.opts.roll) { var tmp_pos = []; for(var i=0; i= 0) || (this._drag && tmp_pos[p-1] > 0)) { for(var i=0; i -1) ? speed : this._speed; if(btn_click) this.position(d); var gap = d * (this._item_w * this._view); if(this._left == 0 || (!this.opts.roll && this.limit_chk()) ) gap = 0; this._list.each(function (i, el) { _this._pos[i] = _this._start[i] + gap; if(_this.opts.supportsCssTransitions && _this.opts.transition) { var transition = speed + "ms"; var transform = "translate3d(" + _this._pos[i] + "px,0,0)"; if(btn_click) transition = "0ms"; $(this).css({ "left" : "", "-moz-transition" : transition, "-moz-transform" : transform, "-ms-transition" : transition, "-ms-transform" : transform, "-webkit-transition" : transition, "-webkit-transform" : transform, "transition" : transition, "transform" : transform }); } else { $(this).animate({"left": _this._pos[i] + "px"}, speed); } }); this.counter(); } }, direction : function () { var r = 0; if(this._left < -(this._range)) r = -1; else if(this._left > this._range) r = 1; if(!this._drag || this._scroll) r = 0; return r; }, limit_chk : function () { var last_p = parseInt((this._len - 1) / this._view) * this._view; return ( (this._start[0] == 0 && this._left > 0) || (this._start[last_p] == 0 && this._left < 0) ); }, go_page : function (i, e) { var crt = ($.inArray(0, this._pos) / this._view) + 1; var cal = crt - (i + 1); while(cal != 0) { if(cal < 0) { this.animate(-1, true); cal++; } else if(cal > 0) { this.animate(1, true); cal--; } } }, get_page : function () { return { total : Math.ceil(this._len / this._view), current : ($.inArray(0, this._pos) / this._view) + 1 } }, autoSlideStart : function () { var _this = this; //console.log(this.get_page().current+' - '+this._autoSlideTime); //this.go_page(this.get_page().current); //setInterval(this.get_page().current,this._autoSlideTime*1000); //var sn =10; //setInterval( function(){ if(sn==2){ clearInterval(this); } else { console.log(sn+' - '+_this._autoSlideTime); sn--;} },this._autoSlideTime*1000); //setInterval( this.go_page(this.get_page().current), this._autoSlideTime*1000); setInterval( function(){ if(_this._autoSlide) {_this.animate(-1, true)} else { } }, this._autoSlideTime*1000); }, counter : function () { if($.inArray(0, this._pos) < 0) { this.init(); } this.opts.page = this.get_page().current; if(typeof(this.opts.counter) == "function") { this.opts.counter(this.get_page()); } } }; })(jQuery);