/
jquery.rotation.min.js
1 lines (1 loc) · 10.5 KB
/
jquery.rotation.min.js
1
/*! rotation.js - v0.4.2 - 2014-01-14 */!function(a,b,c,d){"use strict";var e="rotation",f={namespace:"rotation",autoRotate:!0,interval:4e3,duration:300,easing:"linear",transitionIn:"fadeIn",transitionOut:"fadeOut",orientation:"horizontal",pauseOnHover:!0,stopOnHover:!1,scrolling:!0,keypress:!0,touch:!0,touchDelay:500,touchMin:30,touchMax:320,loop:!0,visibleItems:1,step:1,itemWidth:200,responsive:!0,responsiveDelay:150,containerClass:"rotation-container",pausePlayControl:!0,pausePlayControlClass:"rotation-play-pause",pauseText:"Pause",playText:"Play",navControls:!0,navControlsClass:"rotation-nav-controls",navControlsItemClass:"rotation-item",navControlsNextClass:"rotation-next",navControlsPrevClass:"rotation-prev",navControlsNextText:">>",navControlsPrevText:"<<",pagination:!0,paginationNumbers:!0,paginationClass:"rotation-pagination",paginationItemClass:"rotation-page",paginationCurrentItemClass:"current",beforeInit:a.noop,afterInit:a.noop,beforeTransition:a.noop,afterTransition:a.noop,onSwipeLeft:a.noop,onSwipeRight:a.noop,onSwipeUp:a.noop,onSwipeDown:a.noop,onSwipe:a.noop},g=function(b,d){var g,h,i=this;return this.options=a.extend({},f,d),g=a("<section/>",{"class":this.getOption("containerClass")}),h=a("<div/>",{"class":"rotation-viewport"}),this._defaults=f,this._name=e,this.currentIndex=0,this.isAnimating=!1,this.touchSupported="ontouchend"in c,this.itemsContainer=b,this.$itemsContainer=a(this.itemsContainer),this.$itemsViewport=this.$itemsContainer.wrap(h).parent(),this.$items=this.$itemsContainer.children(),this.$container=this.$itemsViewport.wrap(g).parent(),this.metadata=this.$container.data("rotation-options"),this.cssTransition=this.hasCSS("transition"),this.cssTransform=this.hasCSS("transform"),this.cssSupported=!(!this.cssTransition||!this.cssTransform),this.cssTransEvent=this.transitionEndEvent(),this.$items.detach(),this.$itemsContainer.empty(),this.$itemsContainer.append(this.$items),this.validate(),this.options.beforeInit.call(this),this.init(),this.build(),this.bindEvents(),this.play(),this.options.afterInit.call(this),{add:function(){},play:function(){i.play()},pause:function(){i.pause()},itemsCount:function(){return i.itemsCount()},current:function(){return i.currentIndex},setCurrent:function(a,b){i.currentIndex=a,b&&b.call()},next:function(){i.rotate(+i.getOption("step"))},previous:function(){i.rotate(-i.getOption("step"))},destroy:function(){}}};g.VERSION="0.4.2",a.extend(g.prototype,{getOption:function(a){return this.options[a]},setOption:function(a,b){return this.options[a]=b,b},triggerCustomEvent:function(a,b){a.trigger(b)},itemsCount:function(){return this.$items.length},getItemByIndex:function(a){return this.$items.eq(a)},lockAnimation:function(){this.isAnimating=!0},isLocked:function(){return!!this.isAnimating},unlockAnimation:function(){this.isAnimating=!1},hasCSS:function(b){var d,e,f=c.createElement("rotation"),g=["Khtml","Webkit","ms","Moz","O"],h=[""].concat(g).concat([""]),i=b.charAt(0).toUpperCase()+b.slice(1),j=(b+" "+g.join(i+" ")+i).split(" ");a(c.body).prepend(f);for(e in j)if(d=h[e].toLowerCase(),""!==d&&(d="-"+d+"-"),j[e]in f.style)return d+b;return a(c.body).children()[0].remove(),!1},transitionEndEvent:function(){var b=c.createElement("rotation"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"};for(var f in e)if(b.style[f]!==d)return e[f];return a(c.body).children()[0].remove(),!1},init:function(){var c=this;this.$window=a(b),this.windowHeight=this.$window.height(),this.windowWidth=this.$window.width(),this.viewportWidth=this.$itemsViewport.outerWidth(!0),this.viewportHeight=this.$itemsViewport.outerHeight(!0),this.itemWidth=this.viewportWidth/this.getOption("visibleItems"),this.itemHeight=this.viewportHeight/this.getOption("visibleItems"),this.itemsWidth=this.itemWidth*this.itemsCount(),this.itemsHeight=this.itemHeight*this.itemsCount(),this.initIdsOnElements(),this.$itemsContainer.width(this.itemsWidth),this.$items.width(this.itemWidth),this.$items.hide();var d=this.$items.slice(0,this.getOption("visibleItems"));a.each(d,function(b,d){a(d).css("left",b*c.itemWidth).show()})},initIdsOnElements:function(){var a;for(a=0;a<this.itemsCount();a++)this.getItemByIndex(a).addClass("rotation-item-"+(a+1))},validate:function(){var a=this.getOption("respnosive"),b=this.getOption("orientation");"boolean"!=typeof a&&this.setOption("responsive",Boolean(a)),"horizontal"!==b&&"vertical"!==b&&this.setOption("orientation","horizontal")},bindEvents:function(){this.getOption("responsive")&&this.bindResizeEvent(),this.getOption("pauseOnHover")&&this.bindMouseEvents(),this.getOption("scrolling")&&this.bindScrolling(),this.getOption("keypress")&&this.bindKeyboardEvents(),this.getOption("touch")&&this.bindTouchEvents()},bindResizeEvent:function(){var a,b=this;b.$window.on("resize",function(c){if(c.originalEvent){var d=b.$window.width(),e=b.$window.height();(d!==b.windowWidth||e!==b.windowHeight)&&(b.windowWidth=d,b.windowHeight=e,clearTimeout(a),a=setTimeout(function(){b.init(),b.rotate(0)},b.getOption("responsiveDelay")))}})},bindKeyboardEvents:function(){var b=this;a(c).on("keydown",function(a){39===a.keyCode&&b.rotate(+b.getOption("step")),37===a.keyCode&&b.rotate(-b.getOption("step"))})},bindMouseEvents:function(){var a=this;this.$itemsContainer.on("mouseenter",function(){a.setOption("pause",!0)}).on("mouseleave",function(){a.setOption("pause",!1)})},bindScrolling:function(){var a=this;this.$itemsContainer.on("mousewheel",function(b){b.preventDefault(),a.rotate(a.currentIndex+a.getOption("step"))})},bindTouchEvents:function(){var b,c,d,e,f,g,h=this,i=h.getOption("touchDelay"),j=h.getOption("touchMin"),k=h.getOption("touchMax"),l=h.touchSupported?"touchstart":"mousedown",m=h.touchSupported?"touchend":"mouseout",n=h.touchSupported?"touchmove":"mousemove",o=function(a){return a.pageX?a:a.originalEvent.touches[0]||a.originalEvent.changedTouches[0]},p=function(b){var c=o(b);return{time:(new Date).getTime(),touch:c,coords:[c.pageX,c.pageY],origin:a(b.target)}},q=function(a){a.preventDefault(),c=p(a)},r=function(a){c&&(d=p(a),Math.abs(c.coords[0]-d.coords[0])>10&&a.preventDefault())},s=function(l){if(l.preventDefault(),c&&d){if(b=d.time-c.time,f=Math.abs(c.coords[0]-d.coords[0]),g=Math.abs(c.coords[1]-d.coords[1]),e=Math.sqrt(f*f+g*g),15>e&&100>b)return c.origin.trigger("click"),void 0;if(i>b&&e>=j&&k>=e){var m=["swipe"];f>=j&&j>g?(h.setOption("pause",!1),c.coords[0]>d.coords[0]?(m.push("swipeleft"),h.rotate(-h.getOption("step")),h.getOption("onSwipeLeft").call(h)):(m.push("swiperight"),h.rotate(+h.getOption("step")),h.getOption("onSwipeRight").call(h))):g>=j&&j>f&&(h.setOption("pause",!1),c.coords[1]<d.coords[1]?(m.push("swipedown"),h.rotate(-h.getOption("step")),h.getOption("onSwipeDown").call(h)):(m.push("swipeup"),h.rotate(+h.getOption("step")),h.getOption("onSwipeUp").call(h))),a.each(m,function(b,e){var f=a.Event(e,{target:l.target,swipestart:c,swipeend:d});h.triggerCustomEvent(h.$itemsContainer,f)})}}};h.$itemsContainer.on(l,q).on(n,r).on(m,s)},rotate:function(a,b){if(!(this.itemsCount()<=1||this.getOption("pause"))){a&&this.pause();var c,d,e,f=this.currentIndex,g=this.itemsCount(),h=this.getItemByIndex(f);c="horizontal"===this.getOption("orientation")?this.itemWidth:this.itemHeight,f=0===f&&0>a?g-1:(a?f+a:++f)%g,d=this.getItemByIndex(f),e=a?a*c:c,this.$itemsContainer.stop(),this.isLocked()||(this.lockAnimation(),this.getOption("beforeTransition").call(this,this.currentIndex),this.animations.slide.call(this,h,d,e,f),this.getOption("pagination")&&this.setPaginationCurrentItem(a),b&&"function"==typeof b&&b(),a&&this.play())}},animations:{slide:function(b,c,d,e){var f=this,g=this.getOption("duration"),h=this.getOption("easing"),i=this.getOption("orientation"),j=[];"horizontal"===i?(j.push(a(b).css({left:0}).animate({left:-d},{duration:g,easing:h}).promise()),j.push(a(c).css({left:d}).show().animate({left:0},{duration:g,easing:h}).promise())):(j.push(a(b).css({top:0}).animate({top:-d},{duration:g}).promise()),j.push(a(c).css({top:d}).show().animate({top:0},{duration:g}).promise())),a.when.apply(null,j).done(function(){f.currentIndex=e,f.unlockAnimation(),f.getOption("afterTransition").call(f,f.currentIndex)})}},play:function(){var b=this;this.getOption("autoRotate")&&(this.auto=setInterval(function(){b.rotate()},this.getOption("interval")),b.triggerCustomEvent(b.$itemsContainer,a.Event("play")))},pause:function(){var b=this;b.auto&&(b.auto=clearInterval(b.auto)),b.triggerCustomEvent(b.$itemsContainer,a.Event("pause"))},setPaginationCurrentItem:function(b){var c,d,e,f,g=this.getOption("paginationCurrentItemClass"),h=a("."+this.getOption("paginationClass"),this.container),i=a("a."+g,h).parent("li");f=0>b?"last":"first",c=b?0>b?this.currentIndex+b:this.currentIndex+b-1:this.currentIndex,d=i.siblings().eq(c),e=d.length?d.find("a"):a("a:"+f,h),a("a."+g,h).removeClass(g),e.addClass(g)},build:function(){this.getOption("navControls")&&this.buildNavControls(),this.getOption("pagination")&&this.buildPagination()},buildNavControls:function(){if(!(this.itemsCount()<=1)){var b,c,d=this,e=this.$container;b=a("<ul/>",{"class":this.getOption("navControlsClass")}),a("<nav/>").wrapInner(b).appendTo(e),c=a("<a/>",{href:"#","class":this.getOption("navControlsItemClass")+" "+this.getOption("navControlsPrevClass"),"data-direction":-this.getOption("step"),html:this.getOption("navControlsPrevText")}),a("<li/>").wrapInner(c).appendTo(b),c=a("<a/>",{href:"#","class":this.getOption("navControlsItemClass")+" "+this.getOption("navControlsNextClass"),"data-direction":+this.getOption("step"),html:this.getOption("navControlsNextText")}),a("<li/>").wrapInner(c).appendTo(b),b.children().find("a").on("click",function(b){b.preventDefault();var c=+a(this).data("direction");d.rotate(c)})}},buildPagination:function(){if(!(this.itemsCount()<=1)){var b,c,d,e,f,g=this,h=this.$container;for(b=a("<ol/>",{"class":this.getOption("paginationClass"),role:"navigation","aria-labelledby":"paginglabel"}),b.appendTo(h),e=0;e<this.itemsCount();e++)c=a("<li/>"),d=a("<a/>",{href:"#rotation-item-"+e,"data-index":e,text:this.getOption("paginationNumbers")?e+1:"","class":this.getOption("paginationItemClass")}),d.appendTo(c),c.appendTo(b);f=a("li",b).children(),f.eq(0).addClass(this.getOption("paginationCurrentItemClass")),f.on("click touchstart",function(b){b.preventDefault();var c,d,e=a(this),f=g.getOption("paginationCurrentItemClass"),h=+e.data("index");d=+e.parent("li").siblings("li").find("a."+f).data("index"),c=h-d,g.rotate(c)})}}}),g.defaults=g.prototype.defaults,a.fn[e]=function(b){return this.each(function(){var c=this,d=a.data(c,e);d||a.data(c,e,new g(c,b))})},b.Rotation=g}(jQuery,window,document);