From 795861078d0f0c9ee78017c838a816dc82156e9d Mon Sep 17 00:00:00 2001 From: TG Date: Thu, 24 Nov 2016 14:59:14 +0100 Subject: [PATCH] Add prev and next event --- dist/sly.js | 31 +++++++++++++++++-------------- dist/sly.min.js | 2 +- docs/Events.md | 24 +++++++++++++++++++++++- src/sly.js | 36 +++++++++++++++++++++++------------- 4 files changed, 64 insertions(+), 29 deletions(-) diff --git a/dist/sly.js b/dist/sly.js index ad4e88e..f8cc6b7 100644 --- a/dist/sly.js +++ b/dist/sly.js @@ -1,5 +1,5 @@ /*! - * sly 1.6.1 - 8th Aug 2015 + * sly 1.6.1 - 24th Nov 2016 * https://github.com/darsain/sly * * Licensed under the MIT license. @@ -630,7 +630,8 @@ * @return {Void} */ self.prev = function () { - self.activate(rel.activeItem == null ? 0 : rel.activeItem - 1); + var index = self.activate(rel.activeItem == null ? 0 : rel.activeItem - 1); + trigger('prev', index); }; /** @@ -639,7 +640,8 @@ * @return {Void} */ self.next = function () { - self.activate(rel.activeItem == null ? 0 : rel.activeItem + 1); + var index = self.activate(rel.activeItem == null ? 0 : rel.activeItem + 1); + trigger('next', index); }; /** @@ -770,10 +772,10 @@ */ function getIndex(item) { return item != null ? - isNumber(item) ? - item >= 0 && item < items.length ? item : -1 : - $items.index(item) : - -1; + isNumber(item) ? + item >= 0 && item < items.length ? item : -1 : + $items.index(item) : + -1; } // Expose getIndex without lowering the compressibility of it, // as it is used quite often throughout Sly. @@ -826,7 +828,7 @@ * @param {Mixed} item Item DOM element, or index starting at 0. * @param {Bool} immediate Whether to reposition immediately in smart navigation. * - * @return {Void} + * @return {Mixed} */ self.activate = function (item, immediate) { var index = activate(item); @@ -847,6 +849,7 @@ resetCycle(); } } + return index; }; /** @@ -1225,7 +1228,7 @@ self.on(key, name[key]); } } - // Callback + // Callback } else if (type(fn) === 'function') { var names = name.split(' '); for (var n = 0, nl = names.length; n < nl; n++) { @@ -1234,7 +1237,7 @@ callbacks[names[n]].push(fn); } } - // Callbacks array + // Callbacks array } else if (type(fn) === 'array') { for (var f = 0, fl = fn.length; f < fl; f++) { self.on(name, fn[f]); @@ -2062,8 +2065,8 @@ || fallback; /** - * Fallback implementation. - */ + * Fallback implementation. + */ var prev = new Date().getTime(); function fallback(fn) { var curr = new Date().getTime(); @@ -2074,8 +2077,8 @@ } /** - * Cancel. - */ + * Cancel. + */ var cancel = w.cancelAnimationFrame || w.webkitCancelAnimationFrame || w.clearTimeout; diff --git a/dist/sly.min.js b/dist/sly.min.js index a6b56ab..c218a64 100644 --- a/dist/sly.min.js +++ b/dist/sly.min.js @@ -1,2 +1,2 @@ /*! sly 1.6.1 - 8th Aug 2015 | https://github.com/darsain/sly */ -!function(a,b,c){"use strict";function d(b,p,q){function K(c){var d=0,e=Gb.length;if(yb.old=a.extend({},yb),wb=tb?0:ub[rb.horizontal?"width":"height"](),Bb=zb[rb.horizontal?"width":"height"](),xb=tb?b:vb[rb.horizontal?"outerWidth":"outerHeight"](),Gb.length=0,yb.start=0,yb.end=H(xb-wb,0),Rb){d=Ib.length,Hb=vb.children(rb.itemSelector),Ib.length=0;var f,g=j(vb,rb.horizontal?"paddingLeft":"paddingTop"),h=j(vb,rb.horizontal?"paddingRight":"paddingBottom"),i="border-box"===a(Hb).css("boxSizing"),l="none"!==Hb.css("float"),m=0,n=Hb.length-1;xb=0,Hb.each(function(b,c){var d=a(c),e=c.getBoundingClientRect(),i=G(rb.horizontal?e.width||e.right-e.left:e.height||e.bottom-e.top),k=j(d,rb.horizontal?"marginLeft":"marginTop"),o=j(d,rb.horizontal?"marginRight":"marginBottom"),p=i+k+o,q=!k||!o,r={};r.el=c,r.size=q?i:p,r.half=r.size/2,r.start=xb+(q?k:0),r.center=r.start-G(wb/2-r.size/2),r.end=r.start-wb+r.size,b||(xb+=g),xb+=p,rb.horizontal||l||o&&k&&b>0&&(xb-=I(k,o)),b===n&&(r.end+=h,xb+=h,m=q?o:0),Ib.push(r),f=r}),vb[0].style[rb.horizontal?"width":"height"]=(i?xb:xb-g-h)+"px",xb-=m,Ib.length?(yb.start=Ib[0][Pb?"center":"start"],yb.end=Pb?f.center:xb>wb?f.end:yb.start):yb.start=yb.end=0}if(yb.center=G(yb.end/2+yb.start/2),V(),Ab.length&&Bb>0&&(rb.dynamicHandle?(Cb=yb.start===yb.end?Bb:G(Bb*wb/xb),Cb=k(Cb,rb.minHandleSize,Bb),Ab[0].style[rb.horizontal?"width":"height"]=Cb+"px"):Cb=Ab[rb.horizontal?"outerWidth":"outerHeight"](),Db.end=Bb-Cb,ec||N()),!tb&&wb>0){var o=yb.start,p="";if(Rb)a.each(Ib,function(a,b){Pb?Gb.push(b.center):b.start+b.size>o&&o<=yb.end&&(o=b.start,Gb.push(o),o+=wb,o>yb.end&&oyb.start&&ayb.end?a=yb.end+(a-yb.end)/6:a0?yb.end:yb.start)||sb.stop(),hc=cc.init?t(P):0,bc.now=+new Date,bc.pos=yb.cur+(bc.now-bc.lastTime)/1e3*bc.speed,L(cc.init?bc.pos:G(bc.pos)),cc.init||yb.cur!==yb.dest||ob("moveEnd"),bc.lastTime=bc.now}function Q(a,b,d){if("boolean"===e(b)&&(d=b,b=c),b===c)L(yb[a],d);else{if(Qb&&"center"!==a)return;var f=sb.getPos(b);f&&L(f[a],d,!Qb)}}function R(a){return null!=a?i(a)?a>=0&&aa?a+Ib.length:a)}function T(a,b){var c=R(a);return!Rb||0>c?!1:((_b.active!==c||b)&&(Hb.eq(Jb.activeItem).removeClass(rb.activeClass),Hb.eq(c).addClass(rb.activeClass),_b.active=Jb.activeItem=c,W(),ob("active",c)),c)}function U(a){a=k(i(a)?a:yb.dest,yb.start,yb.end);var b={},c=Pb?0:wb/2;if(!tb)for(var d=0,e=Gb.length;e>d;d++){if(a>=yb.end||d===Gb.length-1){b.activePage=Gb.length-1;break}if(a<=Gb[d]+c){b.activePage=d;break}}if(Rb){for(var f=!1,g=!1,h=!1,j=0,l=Ib.length;l>j;j++)if(f===!1&&a<=Ib[j].start+Ib[j].half&&(f=j),h===!1&&a<=Ib[j].center+Ib[j].half&&(h=j),j===l-1||a<=Ib[j].end+Ib[j].half){g=j;break}b.firstItem=i(f)?f:0,b.centerItem=i(h)?h:b.firstItem,b.lastItem=i(g)?g:b.centerItem}return b}function V(b){a.extend(Jb,U(b))}function W(){var a=yb.dest<=yb.start,b=yb.dest>=yb.end,c=(a?1:0)|(b?2:0);if(_b.slideePosState!==c&&(_b.slideePosState=c,Yb.is("button,input")&&Yb.prop("disabled",a),Zb.is("button,input")&&Zb.prop("disabled",b),Yb.add(Vb)[a?"addClass":"removeClass"](rb.disabledClass),Zb.add(Ub)[b?"addClass":"removeClass"](rb.disabledClass)),_b.fwdbwdState!==c&&cc.released&&(_b.fwdbwdState=c,Vb.is("button,input")&&Vb.prop("disabled",a),Ub.is("button,input")&&Ub.prop("disabled",b)),Rb&&null!=Jb.activeItem){var d=0===Jb.activeItem,e=Jb.activeItem>=Ib.length-1,f=(d?1:0)|(e?2:0);_b.itemsButtonState!==f&&(_b.itemsButtonState=f,Wb.is("button,input")&&Wb.prop("disabled",d),Xb.is("button,input")&&Xb.prop("disabled",e),Wb[d?"addClass":"removeClass"](rb.disabledClass),Xb[e?"addClass":"removeClass"](rb.disabledClass))}}function X(a,b,c){if(a=S(a),b=S(b),a>-1&&b>-1&&a!==b&&(!c||b!==a-1)&&(c||b!==a+1)){Hb.eq(a)[c?"insertAfter":"insertBefore"](Ib[b].el);var d=b>a?a:c?b:b-1,e=a>b?a:c?b+1:b,f=a>b;null!=Jb.activeItem&&(a===Jb.activeItem?_b.active=Jb.activeItem=c?f?b+1:b:f?b:b-1:Jb.activeItem>d&&Jb.activeItemc;c++)if($b[a][c]===b)return c;return-1}function Z(){cc.released&&!sb.isPaused&&sb.resume()}function $(a){return G(k(a,Db.start,Db.end)/Db.end*(yb.end-yb.start))+yb.start}function _(){cc.history[0]=cc.history[1],cc.history[1]=cc.history[2],cc.history[2]=cc.history[3],cc.history[3]=cc.delta}function ab(a){cc.released=0,cc.source=a,cc.slidee="slidee"===a}function bb(b){var c="touchstart"===b.type,d=b.data.source,e="slidee"===d;cc.init||!c&&eb(b.target)||("handle"!==d||rb.dragHandle&&Db.start!==Db.end)&&(!e||(c?rb.touchDragging:rb.mouseDragging&&b.which<2))&&(c||f(b),ab(d),cc.init=0,cc.$source=a(b.target),cc.touch=c,cc.pointer=c?b.originalEvent.touches[0]:b,cc.initX=cc.pointer.pageX,cc.initY=cc.pointer.pageY,cc.initPos=e?yb.cur:Db.cur,cc.start=+new Date,cc.time=0,cc.path=0,cc.delta=0,cc.locked=0,cc.history=[0,0,0,0],cc.pathToLock=e?c?30:10:0,u.on(c?x:w,cb),sb.pause(1),(e?vb:Ab).addClass(rb.draggedClass),ob("moveStart"),e&&(fc=setInterval(_,10)))}function cb(a){if(cc.released="mouseup"===a.type||"touchend"===a.type,cc.pointer=cc.touch?a.originalEvent[cc.released?"changedTouches":"touches"][0]:a,cc.pathX=cc.pointer.pageX-cc.initX,cc.pathY=cc.pointer.pageY-cc.initY,cc.path=E(F(cc.pathX,2)+F(cc.pathY,2)),cc.delta=rb.horizontal?cc.pathX:cc.pathY,cc.released||!(cc.path<1)){if(!cc.init){if(cc.pathD(cc.pathY):D(cc.pathX)cc.pathToLock&&cc.slidee&&(cc.locked=1,cc.$source.on(z,g)),cc.released&&(db(),rb.releaseSwing&&cc.slidee&&(cc.swing=(cc.delta-cc.history[0])/40*300,cc.delta+=cc.swing,cc.tweese=D(cc.swing)>10)),L(cc.slidee?G(cc.initPos-cc.delta):$(cc.initPos+cc.delta))}}function db(){clearInterval(fc),cc.released=!0,u.off(cc.touch?x:w,cb),(cc.slidee?vb:Ab).removeClass(rb.draggedClass),setTimeout(function(){cc.$source.off(z,g)}),yb.cur===yb.dest&&cc.init&&ob("moveEnd"),sb.resume(1),cc.init=0}function eb(b){return~a.inArray(b.nodeName,B)||a(b).is(rb.interactive)}function fb(){sb.stop(),u.off("mouseup",fb)}function gb(a){switch(f(a),this){case Ub[0]:case Vb[0]:sb.moveBy(Ub.is(this)?rb.moveBy:-rb.moveBy),u.on("mouseup",fb);break;case Wb[0]:sb.prev();break;case Xb[0]:sb.next();break;case Yb[0]:sb.prevPage();break;case Zb[0]:sb.nextPage()}}function hb(a){return dc.curDelta=(rb.horizontal?a.deltaY||a.deltaX:a.deltaY)||-a.wheelDelta,dc.curDelta/=1===a.deltaMode?3:100,Rb?(o=+new Date,dc.lastb&&Sb[0]!==document&&Sb[0]!==window)return void(J=b);if(rb.scrollBy&&yb.start!==yb.end){var c=hb(a.originalEvent);(rb.scrollTrap||c>0&&yb.destc&&yb.dest>yb.start)&&f(a,1),sb.slideBy(rb.scrollBy*c)}}function jb(a){rb.clickBar&&a.target===zb[0]&&(f(a),L($((rb.horizontal?a.pageX-zb.offset().left:a.pageY-zb.offset().top)-Cb/2)))}function kb(a){if(rb.keyboardNavBy)switch(a.which){case rb.horizontal?37:38:f(a),sb["pages"===rb.keyboardNavBy?"prevPage":"prev"]();break;case rb.horizontal?39:40:f(a),sb["pages"===rb.keyboardNavBy?"nextPage":"next"]()}}function lb(a){return eb(this)?void(a.originalEvent[r+"ignore"]=!0):void(this.parentNode!==vb[0]||a.originalEvent[r+"ignore"]||sb.activate(this))}function mb(){this.parentNode===Eb[0]&&sb.activatePage(Fb.index(this))}function nb(a){rb.pauseOnHover&&sb["mouseenter"===a.type?"pause":"resume"](2)}function ob(a,b){if($b[a]){for(qb=$b[a].length,C.length=0,pb=0;qb>pb;pb++)C.push($b[a][pb]);for(pb=0;qb>pb;pb++)C[pb].call(sb,a,b)}}if(!(this instanceof d))return new d(b,p,q);var pb,qb,rb=a.extend({},d.defaults,p),sb=this,tb=i(b),ub=a(b),vb=rb.slidee?a(rb.slidee).eq(0):ub.children().eq(0),wb=0,xb=0,yb={start:0,center:0,end:0,cur:0,dest:0},zb=a(rb.scrollBar).eq(0),Ab=zb.children().eq(0),Bb=0,Cb=0,Db={start:0,end:0,cur:0},Eb=a(rb.pagesBar),Fb=0,Gb=[],Hb=0,Ib=[],Jb={firstItem:0,lastItem:0,centerItem:0,activeItem:null,activePage:0},Kb=new l(ub[0]),Lb=new l(vb[0]),Mb=new l(zb[0]),Nb=new l(Ab[0]),Ob="basic"===rb.itemNav,Pb="forceCentered"===rb.itemNav,Qb="centered"===rb.itemNav||Pb,Rb=!tb&&(Ob||Qb||Pb),Sb=rb.scrollSource?a(rb.scrollSource):ub,Tb=rb.dragSource?a(rb.dragSource):ub,Ub=a(rb.forward),Vb=a(rb.backward),Wb=a(rb.prev),Xb=a(rb.next),Yb=a(rb.prevPage),Zb=a(rb.nextPage),$b={},_b={},ac={},bc={},cc={released:1},dc={last:0,delta:0,resetTime:200},ec=0,fc=0,gc=0,hc=0;tb||(b=ub[0]),sb.initialized=0,sb.frame=b,sb.slidee=vb[0],sb.pos=yb,sb.rel=Jb,sb.items=Ib,sb.pages=Gb,sb.isPaused=0,sb.options=rb,sb.dragging=cc,sb.reload=function(){K()},sb.getPos=function(a){if(Rb){var b=R(a);return-1!==b?Ib[b]:!1}var c=vb.find(a).eq(0);if(c[0]){var d=rb.horizontal?c.offset().left-vb.offset().left:c.offset().top-vb.offset().top,e=c[rb.horizontal?"outerWidth":"outerHeight"]();return{start:d,center:d-wb/2+e/2,end:d-wb+e,size:e}}return!1},sb.moveBy=function(a){bc.speed=a,!cc.init&&bc.speed&&yb.cur!==(bc.speed>0?yb.end:yb.start)&&(bc.lastTime=+new Date,bc.startPos=yb.cur,ab("button"),cc.init=1,ob("moveStart"),s(hc),P())},sb.stop=function(){"button"===cc.source&&(cc.init=0,cc.released=1)},sb.prev=function(){sb.activate(null==Jb.activeItem?0:Jb.activeItem-1)},sb.next=function(){sb.activate(null==Jb.activeItem?0:Jb.activeItem+1)},sb.prevPage=function(){sb.activatePage(Jb.activePage-1)},sb.nextPage=function(){sb.activatePage(Jb.activePage+1)},sb.slideBy=function(a,b){a&&(Rb?sb[Qb?"toCenter":"toStart"](k((Qb?Jb.centerItem:Jb.firstItem)+rb.scrollBy*a,0,Ib.length)):L(yb.dest+a,b))},sb.slideTo=function(a,b){L(a,b)},sb.toStart=function(a,b){Q("start",a,b)},sb.toEnd=function(a,b){Q("end",a,b)},sb.toCenter=function(a,b){Q("center",a,b)},sb.getIndex=R,sb.activate=function(a,b){var c=T(a);rb.smart&&c!==!1&&(Qb?sb.toCenter(c,b):c>=Jb.lastItem?sb.toStart(c,b):c<=Jb.firstItem?sb.toEnd(c,b):Z())},sb.activatePage=function(a,b){i(a)&&L(Gb[k(a,0,Gb.length-1)],b)},sb.resume=function(a){rb.cycleBy&&rb.cycleInterval&&("items"!==rb.cycleBy||Ib[0]&&null!=Jb.activeItem)&&!(a=Ib.length-1?0:Jb.activeItem+1);break;case"pages":sb.activatePage(Jb.activePage>=Gb.length-1?0:Jb.activePage+1)}},rb.cycleInterval))},sb.pause=function(a){a=Ib.length?d.appendTo(vb):Ib.length&&d.insertBefore(Ib[c].el),null!=Jb.activeItem&&c<=Jb.activeItem&&(_b.active=Jb.activeItem+=d.length)):vb.append(d),K()},sb.remove=function(b){if(Rb){var c=S(b);if(c>-1){Hb.eq(c).remove();var d=c===Jb.activeItem;null!=Jb.activeItem&&cf;f++)$b[d[f]]=$b[d[f]]||[],-1===Y(d[f],b)&&$b[d[f]].push(b);else if("array"===e(b))for(var h=0,i=b.length;i>h;h++)sb.on(a,b[h])},sb.one=function(a,b){function c(){b.apply(sb,arguments),sb.off(a,c)}sb.on(a,c)},sb.off=function(a,b){if(b instanceof Array)for(var c=0,d=b.length;d>c;c++)sb.off(a,b[c]);else for(var e=a.split(" "),f=0,g=e.length;g>f;f++)if($b[e[f]]=$b[e[f]]||[],null==b)$b[e[f]].length=0;else{var h=Y(e[f],b);-1!==h&&$b[e[f]].splice(h,1)}},sb.destroy=function(){return d.removeInstance(b),Sb.add(Ab).add(zb).add(Eb).add(Ub).add(Vb).add(Wb).add(Xb).add(Yb).add(Zb).off("."+r),u.off("keydown",kb),Wb.add(Xb).add(Yb).add(Zb).removeClass(rb.disabledClass),Hb&&null!=Jb.activeItem&&Hb.eq(Jb.activeItem).removeClass(rb.activeClass),Eb.empty(),tb||(ub.off("."+r),Kb.restore(),Lb.restore(),Mb.restore(),Nb.restore(),a.removeData(b,r)),Ib.length=Gb.length=0,_b={},sb.initialized=0,sb},sb.init=function(){if(!sb.initialized){if(d.getInstance(b))throw new Error("There is already a Sly instance on this element");d.storeInstance(b,sb),sb.on(q);var a=["overflow","position"],c=["position","webkitTransform","msTransform","transform","left","top","width","height"];Kb.save.apply(Kb,a),Mb.save.apply(Mb,a),Lb.save.apply(Lb,c),Nb.save.apply(Nb,c);var e=Ab;return tb||(e=e.add(vb),ub.css("overflow","hidden"),m||"static"!==ub.css("position")||ub.css("position","relative")),m?n&&e.css(m,n):("static"===zb.css("position")&&zb.css("position","relative"),e.css({position:"absolute"})),rb.forward&&Ub.on(A,gb),rb.backward&&Vb.on(A,gb),rb.prev&&Wb.on(z,gb),rb.next&&Xb.on(z,gb),rb.prevPage&&Yb.on(z,gb),rb.nextPage&&Zb.on(z,gb),Sb.on(y,ib),zb[0]&&zb.on(z,jb),Rb&&rb.activateOn&&ub.on(rb.activateOn+"."+r,"*",lb),Eb[0]&&rb.activatePageOn&&Eb.on(rb.activatePageOn+"."+r,"*",mb),Tb.on(v,{source:"slidee"},bb),Ab&&Ab.on(v,{source:"handle"},bb),u.on("keydown",kb),tb||(ub.on("mouseenter."+r+" mouseleave."+r,nb),ub.on("scroll."+r,h)),sb.initialized=1,K(!0),rb.cycleBy&&!tb&&sb[rb.startPaused?"pause":"resume"](),sb}}}function e(a){return null==a?String(a):"object"==typeof a||"function"==typeof a?Object.prototype.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()||"object":typeof a}function f(a,b){a.preventDefault(),b&&a.stopPropagation()}function g(b){f(b,1),a(this).off(b.type,g)}function h(){this.scrollLeft=0,this.scrollTop=0}function i(a){return!isNaN(parseFloat(a))&&isFinite(a)}function j(a,b){return 0|G(String(a.css(b)).replace(/[^\-0-9.]/g,""))}function k(a,b,c){return b>a?b:a>c?c:a}function l(a){var b={};return b.style={},b.save=function(){if(a&&a.nodeType){for(var c=0;cd;d++){var f=b[d]?b[d]+a.charAt(0).toUpperCase()+a.slice(1):a;if(null!=c.style[f])return f}}var b=["","Webkit","Moz","ms","O"],c=document.createElement("div");m=a("transform"),n=a("perspective")?"translateZ(0) ":""}(),b[q]=d,a.fn[p]=function(b,c){var f,g;return a.isPlainObject(b)||(("string"===e(b)||b===!1)&&(f=b===!1?"destroy":b,g=Array.prototype.slice.call(arguments,1)),b={}),this.each(function(a,e){var h=d.getInstance(e);h||f?h&&f&&h[f]&&h[f].apply(h,g):h=new d(e,b,c).init()})},d.defaults={slidee:null,horizontal:!1,itemNav:null,itemSelector:null,smart:!1,activateOn:null,activateMiddle:!1,scrollSource:null,scrollBy:0,scrollHijack:300,scrollTrap:!1,dragSource:null,mouseDragging:!1,touchDragging:!1,releaseSwing:!1,swingSpeed:.2,elasticBounds:!1,dragThreshold:3,interactive:null,scrollBar:null,dragHandle:!1,dynamicHandle:!1,minHandleSize:50,clickBar:!1,syncSpeed:.5,pagesBar:null,activatePageOn:null,pageBuilder:function(a){return"
  • "+(a+1)+"
  • "},forward:null,backward:null,prev:null,next:null,prevPage:null,nextPage:null,cycleBy:null,cycleInterval:5e3,pauseOnHover:!1,startPaused:!1,moveBy:300,speed:0,easing:"swing",startAt:null,keyboardNavBy:null,draggedClass:"dragged",activeClass:"active",disabledClass:"disabled"}}(jQuery,window); \ No newline at end of file +!function(a,b,c){"use strict";function B(b,d,e){function Da(c){var d=0,e=Z.length;if(R.old=a.extend({},R),P=M?0:N[K.horizontal?"width":"height"](),U=S[K.horizontal?"width":"height"](),Q=M?b:O[K.horizontal?"outerWidth":"outerHeight"](),Z.length=0,R.start=0,R.end=y(Q-P,0),ia){d=_.length,$=O.children(K.itemSelector),_.length=0;var l,f=H(O,K.horizontal?"paddingLeft":"paddingTop"),g=H(O,K.horizontal?"paddingRight":"paddingBottom"),h="border-box"===a($).css("boxSizing"),i="none"!==$.css("float"),j=0,k=$.length-1;Q=0,$.each(function(b,c){var d=a(c),e=c.getBoundingClientRect(),h=x(K.horizontal?e.width||e.right-e.left:e.height||e.bottom-e.top),m=H(d,K.horizontal?"marginLeft":"marginTop"),n=H(d,K.horizontal?"marginRight":"marginBottom"),o=h+m+n,p=!m||!n,q={};q.el=c,q.size=p?h:o,q.half=q.size/2,q.start=Q+(p?m:0),q.center=q.start-x(P/2-q.size/2),q.end=q.start-P+q.size,b||(Q+=f),Q+=o,K.horizontal||i||n&&m&&b>0&&(Q-=z(m,n)),b===k&&(q.end+=g,Q+=g,j=p?n:0),_.push(q),l=q}),O[0].style[K.horizontal?"width":"height"]=(h?Q:Q-f-g)+"px",Q-=j,_.length?(R.start=_[0][ga?"center":"start"],R.end=ga?l.center:P0&&(K.dynamicHandle?(V=R.start===R.end?U:x(U*P/Q),V=I(V,K.minHandleSize,U),T[0].style[K.horizontal?"width":"height"]=V+"px"):V=T[K.horizontal?"outerWidth":"outerHeight"](),W.end=U-V,xa||Ga()),!M&&P>0){var m=R.start,n="";if(ia)a.each(_,function(a,b){ga?Z.push(b.center):b.start+b.size>m&&m<=R.end&&(m=b.start,Z.push(m),m+=P,m>R.end&&mR.start&&aR.end?a=R.end+(a-R.end)/6:a0?R.end:R.start)||L.stop(),Aa=va.init?h(Ia):0,ua.now=+new Date,ua.pos=R.cur+(ua.now-ua.lastTime)/1e3*ua.speed,Ea(va.init?ua.pos:x(ua.pos)),va.init||R.cur!==R.dest||hb("moveEnd"),ua.lastTime=ua.now}function Ja(a,b,d){if("boolean"===C(b)&&(d=b,b=c),b===c)Ea(R[a],d);else{if(ha&&"center"!==a)return;var e=L.getPos(b);e&&Ea(e[a],d,!ha)}}function Ka(a){return null!=a?G(a)?a>=0&&a<_.length?a:-1:$.index(a):-1}function La(a){return Ka(G(a)&&a<0?a+_.length:a)}function Ma(a,b){var c=Ka(a);return!(!ia||c<0)&&((sa.active!==c||b)&&($.eq(aa.activeItem).removeClass(K.activeClass),$.eq(c).addClass(K.activeClass),sa.active=aa.activeItem=c,Pa(),hb("active",c)),c)}function Na(a){a=I(G(a)?a:R.dest,R.start,R.end);var b={},c=ga?0:P/2;if(!M)for(var d=0,e=Z.length;d=R.end||d===Z.length-1){b.activePage=Z.length-1;break}if(a<=Z[d]+c){b.activePage=d;break}}if(ia){for(var f=!1,g=!1,h=!1,i=0,j=_.length;i=R.end,c=(a?1:0)|(b?2:0);if(sa.slideePosState!==c&&(sa.slideePosState=c,pa.is("button,input")&&pa.prop("disabled",a),qa.is("button,input")&&qa.prop("disabled",b),pa.add(ma)[a?"addClass":"removeClass"](K.disabledClass),qa.add(la)[b?"addClass":"removeClass"](K.disabledClass)),sa.fwdbwdState!==c&&va.released&&(sa.fwdbwdState=c,ma.is("button,input")&&ma.prop("disabled",a),la.is("button,input")&&la.prop("disabled",b)),ia&&null!=aa.activeItem){var d=0===aa.activeItem,e=aa.activeItem>=_.length-1,f=(d?1:0)|(e?2:0);sa.itemsButtonState!==f&&(sa.itemsButtonState=f,na.is("button,input")&&na.prop("disabled",d),oa.is("button,input")&&oa.prop("disabled",e),na[d?"addClass":"removeClass"](K.disabledClass),oa[e?"addClass":"removeClass"](K.disabledClass))}}function Qa(a,b,c){if(a=La(a),b=La(b),a>-1&&b>-1&&a!==b&&(!c||b!==a-1)&&(c||b!==a+1)){$.eq(a)[c?"insertAfter":"insertBefore"](_[b].el);var d=ab?a:c?b+1:b,f=a>b;null!=aa.activeItem&&(a===aa.activeItem?sa.active=aa.activeItem=c?f?b+1:b:f?b:b-1:aa.activeItem>d&&aa.activeItemu(va.pathY):u(va.pathX)va.pathToLock&&va.slidee&&(va.locked=1,va.$source.on(p,E)),va.released&&(Ya(),K.releaseSwing&&va.slidee&&(va.swing=(va.delta-va.history[0])/40*300,va.delta+=va.swing,va.tweese=u(va.swing)>10)),Ea(va.slidee?x(va.initPos-va.delta):Ta(va.initPos+va.delta))}}function Ya(){clearInterval(ya),va.released=!0,k.off(va.touch?n:m,Xa),(va.slidee?O:T).removeClass(K.draggedClass),setTimeout(function(){va.$source.off(p,E)}),R.cur===R.dest&&va.init&&hb("moveEnd"),L.resume(1),va.init=0}function Za(b){return~a.inArray(b.nodeName,r)||a(b).is(K.interactive)}function $a(){L.stop(),k.off("mouseup",$a)}function _a(a){switch(D(a),this){case la[0]:case ma[0]:L.moveBy(la.is(this)?K.moveBy:-K.moveBy),k.on("mouseup",$a);break;case na[0]:L.prev();break;case oa[0]:L.next();break;case pa[0]:L.prevPage();break;case qa[0]:L.nextPage()}}function ab(a){return wa.curDelta=(K.horizontal?a.deltaY||a.deltaX:a.deltaY)||-a.wheelDelta,wa.curDelta/=1===a.deltaMode?3:100,ia?(t=+new Date,wa.lastb&&ja[0]!==document&&ja[0]!==window)return void(A=b);if(K.scrollBy&&R.start!==R.end){var c=ab(a.originalEvent);(K.scrollTrap||c>0&&R.destR.start)&&D(a,1),L.slideBy(K.scrollBy*c)}}function cb(a){K.clickBar&&a.target===S[0]&&(D(a),Ea(Ta((K.horizontal?a.pageX-S.offset().left:a.pageY-S.offset().top)-V/2)))}function db(a){if(K.keyboardNavBy)switch(a.which){case K.horizontal?37:38:D(a),L["pages"===K.keyboardNavBy?"prevPage":"prev"]();break;case K.horizontal?39:40:D(a),L["pages"===K.keyboardNavBy?"nextPage":"next"]()}}function eb(a){return Za(this)?void(a.originalEvent[f+"ignore"]=!0):void(this.parentNode!==O[0]||a.originalEvent[f+"ignore"]||L.activate(this))}function fb(){this.parentNode===X[0]&&L.activatePage(Y.index(this))}function gb(a){K.pauseOnHover&&L["mouseenter"===a.type?"pause":"resume"](2)}function hb(a,b){if(ra[a]){for(Ca=ra[a].length,s.length=0,Ba=0;Ba0?R.end:R.start)&&(ua.lastTime=+new Date,ua.startPos=R.cur,Va("button"),va.init=1,hb("moveStart"),g(Aa),Ia())},L.stop=function(){"button"===va.source&&(va.init=0,va.released=1)},L.prev=function(){var a=L.activate(null==aa.activeItem?0:aa.activeItem-1);hb("prev",a)},L.next=function(){var a=L.activate(null==aa.activeItem?0:aa.activeItem+1);hb("next",a)},L.prevPage=function(){L.activatePage(aa.activePage-1)},L.nextPage=function(){L.activatePage(aa.activePage+1)},L.slideBy=function(a,b){a&&(ia?L[ha?"toCenter":"toStart"](I((ha?aa.centerItem:aa.firstItem)+K.scrollBy*a,0,_.length)):Ea(R.dest+a,b))},L.slideTo=function(a,b){Ea(a,b)},L.toStart=function(a,b){Ja("start",a,b)},L.toEnd=function(a,b){Ja("end",a,b)},L.toCenter=function(a,b){Ja("center",a,b)},L.getIndex=Ka,L.activate=function(a,b){var c=Ma(a);return K.smart&&c!==!1&&(ha?L.toCenter(c,b):c>=aa.lastItem?L.toStart(c,b):c<=aa.firstItem?L.toEnd(c,b):Sa()),c},L.activatePage=function(a,b){G(a)&&Ea(Z[I(a,0,Z.length-1)],b)},L.resume=function(a){K.cycleBy&&K.cycleInterval&&("items"!==K.cycleBy||_[0]&&null!=aa.activeItem)&&!(a=_.length-1?0:aa.activeItem+1);break;case"pages":L.activatePage(aa.activePage>=Z.length-1?0:aa.activePage+1)}},K.cycleInterval))},L.pause=function(a){a=_.length?d.appendTo(O):_.length&&d.insertBefore(_[c].el),null!=aa.activeItem&&c<=aa.activeItem&&(sa.active=aa.activeItem+=d.length)):O.append(d),Da()},L.remove=function(b){if(ia){var c=La(b);if(c>-1){$.eq(c).remove();var d=c===aa.activeItem;null!=aa.activeItem&&cc?c:a}function J(a){var b={};return b.style={},b.save=function(){if(a&&a.nodeType){for(var c=0;c"+(a+1)+""},forward:null,backward:null,prev:null,next:null,prevPage:null,nextPage:null,cycleBy:null,cycleInterval:5e3,pauseOnHover:!1,startPaused:!1,moveBy:300,speed:0,easing:"swing",startAt:null,keyboardNavBy:null,draggedClass:"dragged",activeClass:"active",disabledClass:"disabled"}}(jQuery,window); \ No newline at end of file diff --git a/docs/Events.md b/docs/Events.md index 6bf7091..fe0180f 100644 --- a/docs/Events.md +++ b/docs/Events.md @@ -174,4 +174,26 @@ Triggered on each cycle tick. Callback arguments: -1. **eventName** `String` Event name. \ No newline at end of file +1. **eventName** `String` Event name. + +--- + +### prev + +Triggered when prev method is call. + +Callback arguments: + +1. **eventName** `String` Event name. +2. **itemIndex** `Int` Index of activated item. + +--- + +### next + +Triggered when next method is call. + +Callback arguments: + +1. **eventName** `String` Event name. +2. **itemIndex** `Int` Index of activated item. \ No newline at end of file diff --git a/src/sly.js b/src/sly.js index 1cd77a5..f8cc6b7 100644 --- a/src/sly.js +++ b/src/sly.js @@ -1,3 +1,10 @@ +/*! + * sly 1.6.1 - 24th Nov 2016 + * https://github.com/darsain/sly + * + * Licensed under the MIT license. + * http://opensource.org/licenses/MIT + */ ;(function ($, w, undefined) { 'use strict'; @@ -623,7 +630,8 @@ * @return {Void} */ self.prev = function () { - self.activate(rel.activeItem == null ? 0 : rel.activeItem - 1); + var index = self.activate(rel.activeItem == null ? 0 : rel.activeItem - 1); + trigger('prev', index); }; /** @@ -632,7 +640,8 @@ * @return {Void} */ self.next = function () { - self.activate(rel.activeItem == null ? 0 : rel.activeItem + 1); + var index = self.activate(rel.activeItem == null ? 0 : rel.activeItem + 1); + trigger('next', index); }; /** @@ -763,10 +772,10 @@ */ function getIndex(item) { return item != null ? - isNumber(item) ? - item >= 0 && item < items.length ? item : -1 : - $items.index(item) : - -1; + isNumber(item) ? + item >= 0 && item < items.length ? item : -1 : + $items.index(item) : + -1; } // Expose getIndex without lowering the compressibility of it, // as it is used quite often throughout Sly. @@ -819,7 +828,7 @@ * @param {Mixed} item Item DOM element, or index starting at 0. * @param {Bool} immediate Whether to reposition immediately in smart navigation. * - * @return {Void} + * @return {Mixed} */ self.activate = function (item, immediate) { var index = activate(item); @@ -840,6 +849,7 @@ resetCycle(); } } + return index; }; /** @@ -1218,7 +1228,7 @@ self.on(key, name[key]); } } - // Callback + // Callback } else if (type(fn) === 'function') { var names = name.split(' '); for (var n = 0, nl = names.length; n < nl; n++) { @@ -1227,7 +1237,7 @@ callbacks[names[n]].push(fn); } } - // Callbacks array + // Callbacks array } else if (type(fn) === 'array') { for (var f = 0, fl = fn.length; f < fl; f++) { self.on(name, fn[f]); @@ -2055,8 +2065,8 @@ || fallback; /** - * Fallback implementation. - */ + * Fallback implementation. + */ var prev = new Date().getTime(); function fallback(fn) { var curr = new Date().getTime(); @@ -2067,8 +2077,8 @@ } /** - * Cancel. - */ + * Cancel. + */ var cancel = w.cancelAnimationFrame || w.webkitCancelAnimationFrame || w.clearTimeout;