/* * jQuery OwlCarousel v1.21 * * Copyright (c) 2013 Bartosz Wojciechowski * http://www.owlgraphic.com/owlcarousel * * Licensed under MIT * */ // Object.create function if ( typeof Object.create !== "function" ) { Object.create = function( obj ) { function F() {}; F.prototype = obj; return new F(); }; } (function( $, window, document, undefined ) { var Carousel = { init :function(options, el){ var base = this; base.options = $.extend({}, $.fn.owlCarousel.options, options); var elem = el; var $elem = $(el); base.$elem = $elem; base.loadContent() }, loadContent : function(){ var base = this; if (typeof base.options.beforeInit === "function") { base.options.beforeInit.apply(this,[base.$elem]); } if (typeof base.options.jsonPath === "string") { var url = base.options.jsonPath; function getData(data) { if (typeof base.options.jsonSuccess === "function") { base.options.jsonSuccess.apply(this,[data]); } else { var content = ""; for(var i in data["owl"]){ content += data["owl"][i]["item"]; } base.$elem.html(content); } base.logIn(); } $.getJSON(url,getData); } else { base.logIn(); } }, logIn : function(){ var base = this; base.baseClass(); base.$elem .css({opacity: 0}) base.checkTouch(); base.support3d(); base.wrapperWidth = 0; base.currentSlide = 0; //Starting Position base.userItems = base.$elem.children(); base.itemsAmount = base.userItems.length; base.wrapItems(); base.owlItems = base.$elem.find(".owl-item"); base.owlWrapper = base.$elem.find(".owl-wrapper"); base.orignalItems = base.options.items; base.playDirection = "next"; base.checkVisible; //setTimeout(function(){ base.onStartup(); //},0); base.customEvents(); }, onStartup : function(){ var base = this; base.updateItems(); base.calculateAll(); base.buildControls(); base.updateControls(); base.response(); base.moveEvents(); base.stopOnHover(); if(base.options.autoPlay === true){ base.options.autoPlay = 5000; } base.play(); base.$elem.find(".owl-wrapper").css("display","block") if(!base.$elem.is(":visible")){ base.watchVisibility(); } else { setTimeout(function(){ base.$elem.animate({opacity: 1},200); },10); } base.onstartup = false; base.eachMoveUpdate(); if (typeof base.options.afterInit === "function") { base.options.afterInit.apply(this,[base.$elem]); } }, eachMoveUpdate : function(){ var base = this; base.lazyLoad(); base.autoHeight(); if(base.options.singleItem === true){ base.addActiveClass(); } if (typeof base.options.afterAction === "function") { base.options.afterAction.apply(this); } }, updateVars : function(){ var base = this; base.watchVisibility(); base.updateItems(); base.calculateAll(); base.updatePosition(); base.updateControls(); base.eachMoveUpdate(); }, reload : function(elements){ var base = this; setTimeout(function(){ base.updateVars(); },0) }, watchVisibility : function(){ var base = this; clearInterval(base.checkVisible); if(!base.$elem.is(":visible")){ base.$elem.css({opacity: 0}); clearInterval(base.autoPlaySpeed); } else { return false; } base.checkVisible = setInterval(function(){ if (base.$elem.is(":visible")) { base.reload(); base.$elem.animate({opacity: 1},200); clearInterval(base.checkVisible); } }, 500); }, wrapItems : function(){ var base = this; base.userItems.wrapAll("
").wrap("
"); base.$elem.find(".owl-wrapper").wrap("
"); base.wrapperOuter = base.$elem.find(".owl-wrapper-outer"); base.$elem.css("display","block"); }, baseClass : function(){ var base = this; var hasBaseClass = base.$elem.hasClass(base.options.baseClass); var hasThemeClass = base.$elem.hasClass(base.options.theme); if(!hasBaseClass){ base.$elem.addClass(base.options.baseClass); } if(!hasThemeClass){ base.$elem.addClass(base.options.theme); } }, updateItems : function(){ var base = this; if(base.options.responsive === false){ return false; } if(base.options.singleItem === true){ base.options.items = base.orignalItems = 1; base.options.itemsDesktop = false; base.options.itemsDesktopSmall = false; base.options.itemsTablet = false; base.options.itemsMobile = false; return false; } var width = $(window).width(); if(width > (base.options.itemsDesktop[0] || base.orignalItems) ){ base.options.items = base.orignalItems } if(width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false){ base.options.items = base.options.itemsDesktop[1]; } if(width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false){ base.options.items = base.options.itemsDesktopSmall[1]; } if(width <= base.options.itemsTablet[0] && base.options.itemsTablet !== false){ base.options.items = base.options.itemsTablet[1]; } if(width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false){ base.options.items = base.options.itemsMobile[1]; } //if number of items is less than declared if(base.options.items > base.itemsAmount){ base.options.items = base.itemsAmount; } }, response : function(){ var base = this, smallDelay; if(base.options.responsive !== true){ return false } $(window).resize(function(){ if(base.options.autoPlay !== false){ clearInterval(base.autoPlaySpeed); } clearTimeout(smallDelay) smallDelay = setTimeout(function(){ base.updateVars(); },base.options.responsiveRefreshRate); }) }, updatePosition : function(){ var base = this; if(base.support3d === true){ if(base.positionsInArray[base.currentSlide] > base.maximumPixels){ base.transition3d(base.positionsInArray[base.currentSlide]); } else { base.transition3d(0); base.currentSlide = 0; } } else{ if(base.positionsInArray[base.currentSlide] > base.maximumPixels){ base.css2slide(base.positionsInArray[base.currentSlide]); } else { base.css2slide(0); base.currentSlide = 0; } } if(base.options.autoPlay !== false){ base.checkAp(); } }, appendItemsSizes : function(){ var base = this; var roundPages = 0; var lastItem = base.itemsAmount - base.options.items; base.owlItems.each(function(index){ $(this) .css({"width": base.itemWidth}) .data("owl-item",Number(index)); if(index % base.options.items === 0 || index === lastItem){ if(!(index > lastItem)){ roundPages +=1; } } $(this).data("owl-roundPages",roundPages); }); }, appendWrapperSizes : function(){ var base = this; var width = 0; var width = base.owlItems.length * base.itemWidth; base.owlWrapper.css({ "width": width*2, "left": 0 }); base.appendItemsSizes(); }, calculateAll : function(){ var base = this; base.calculateWidth(); base.appendWrapperSizes(); base.loops(); base.max(); }, calculateWidth : function(){ var base = this; base.itemWidth = Math.round(base.$elem.width()/base.options.items) }, max : function(){ var base = this; base.maximumSlide = base.itemsAmount - base.options.items; var maximum = (base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth; maximum = maximum * -1 base.maximumPixels = maximum; return maximum; }, min : function(){ return 0; }, loops : function(){ var base = this; base.positionsInArray = [0]; var elWidth = 0; for(var i = 0; i").toggleClass("clickable", !base.isTouch).appendTo(base.$elem); } if(base.options.pagination === true){ base.buildPagination(); } if(base.options.navigation === true){ base.buildButtons(); } }, buildButtons : function(){ var base = this; var buttonsWrapper = $("
") base.owlControls.append(buttonsWrapper); base.buttonPrev = $("
",{ "class" : "owl-prev", "html" : base.options.navigationText[0] || "" }); base.buttonNext = $("
",{ "class" : "owl-next", "html" : base.options.navigationText[1] || "" }); buttonsWrapper .append(base.buttonPrev) .append(base.buttonNext); buttonsWrapper.on(base.getEvent(), "div[class^=\"owl\"]", function(event){ event.preventDefault(); if($(this).hasClass("owl-next")){ base.next(); } else{ base.prev(); } }) }, getEvent : function(){ var base = this; if (base.isTouch === true){ return "touchend.owlControls"; } else { return "click.owlControls"; } }, buildPagination : function(){ var base = this; base.paginationWrapper = $("
"); base.owlControls.append(base.paginationWrapper); base.paginationWrapper.on(base.getEvent(), ".owl-page", function(event){ event.preventDefault(); if(Number($(this).data("owl-page")) !== base.currentSlide){ base.goTo( Number($(this).data("owl-page")), true); } }); }, updatePagination : function(){ var base = this; if(base.options.pagination === false){ return false; } base.paginationWrapper.html(""); var counter = 0; var lastPage = base.itemsAmount - base.itemsAmount % base.options.items; for(var i = 0; i",{ "class" : "owl-page" }); var paginationButtonInner = $("",{ "text": base.options.paginationNumbers === true ? counter : "", "class": base.options.paginationNumbers === true ? "owl-numbers" : "" }); paginationButton.append(paginationButtonInner); paginationButton.data("owl-page",lastPage === i ? lastItem : i); paginationButton.data("owl-roundPages",counter); base.paginationWrapper.append(paginationButton); } } base.checkPagination(); }, checkPagination : function(){ var base = this; base.paginationWrapper.find(".owl-page").each(function(i,v){ if($(this).data("owl-roundPages") === $(base.owlItems[base.currentSlide]).data("owl-roundPages") ){ base.paginationWrapper .find(".owl-page") .removeClass("active"); $(this).addClass("active"); } }); }, checkNavigation : function(){ var base = this; if(base.options.navigation === false){ return false; } if(base.options.goToFirstNav === false){ if(base.currentSlide === 0 && base.maximumSlide === 0){ base.buttonPrev.addClass("disabled"); base.buttonNext.addClass("disabled"); } else if(base.currentSlide === 0 && base.maximumSlide !== 0){ base.buttonPrev.addClass("disabled"); base.buttonNext.removeClass("disabled"); } else if (base.currentSlide === base.maximumSlide){ base.buttonPrev.removeClass("disabled"); base.buttonNext.addClass("disabled"); } else if(base.currentSlide !== 0 && base.currentSlide !== base.maximumSlide){ base.buttonPrev.removeClass("disabled"); base.buttonNext.removeClass("disabled"); } } }, updateControls : function(){ var base = this; base.updatePagination(); base.checkNavigation(); if(base.owlControls){ if(base.options.items === base.itemsAmount){ base.owlControls.hide(); } else { base.owlControls.show(); } } }, destroyControls : function(){ var base = this; if(base.owlControls){ base.owlControls.remove(); } }, next : function(speed){ var base = this; base.currentSlide += base.options.scrollPerPage === true ? base.options.items : 1; if(base.currentSlide > base.maximumSlide + (base.options.scrollPerPage == true ? (base.options.items - 1) : 0)){ if(base.options.goToFirstNav === true){ base.currentSlide = 0; speed = "goToFirst"; } else { base.currentSlide = base.maximumSlide; return false; } } base.goTo(base.currentSlide,speed); }, prev : function(speed){ var base = this; if(base.options.scrollPerPage === true && base.currentSlide > 0 && base.currentSlide < base.options.items){ base.currentSlide = 0 } else { base.currentSlide -= base.options.scrollPerPage === true ? base.options.items : 1; } if(base.currentSlide < 0){ if(base.options.goToFirstNav === true){ base.currentSlide = base.maximumSlide; speed = "goToFirst" } else { base.currentSlide =0; return false; } } base.goTo(base.currentSlide,speed); }, goTo : function(position,pagination){ var base = this; if(typeof base.options.beforeMove === "function") { base.options.beforeMove.apply(this); } if(position >= base.maximumSlide){ position = base.maximumSlide; } else if( position <= 0 ){ position = 0; } base.currentSlide = position; var goToPixel = base.positionsInArray[position]; if(base.support3d === true){ base.isCss3Finish = false; if(pagination === true){ base.swapTransitionSpeed("paginationSpeed"); setTimeout(function() { base.isCss3Finish = true; }, base.options.paginationSpeed); } else if(pagination === "goToFirst" ){ base.swapTransitionSpeed(base.options.goToFirstSpeed); setTimeout(function() { base.isCss3Finish = true; }, base.options.goToFirstSpeed); } else { base.swapTransitionSpeed("slideSpeed"); setTimeout(function() { base.isCss3Finish = true; }, base.options.slideSpeed); } base.transition3d(goToPixel); } else { if(pagination === true){ base.css2slide(goToPixel, base.options.paginationSpeed); } else if(pagination === "goToFirst" ){ base.css2slide(goToPixel, base.options.goToFirstSpeed); } else { base.css2slide(goToPixel, base.options.slideSpeed); } } if(base.options.pagination === true){ base.checkPagination(); } if(base.options.navigation === true){ base.checkNavigation(); } if(base.options.autoPlay !== false){ base.checkAp(); } base.eachMoveUpdate(); if(typeof base.options.afterMove === "function") { base.options.afterMove.apply(this); } }, stop: function(){ var base = this; base.apStatus = "stop"; clearInterval(base.autoPlaySpeed); }, checkAp : function(){ var base = this; if(base.apStatus !== "stop"){ base.play(); } }, play : function(){ var base = this; base.apStatus = "play"; if(base.options.autoPlay === false){ return false; } clearInterval(base.autoPlaySpeed); base.autoPlaySpeed = setInterval(function(){ if(base.currentSlide < base.maximumSlide && base.playDirection === "next"){ base.next(true); } else if(base.currentSlide === base.maximumSlide){ if(base.options.goToFirst === true){ base.goTo(0,"goToFirst"); } else{ base.playDirection = "prev"; base.prev(true); } } else if(base.playDirection === "prev" && base.currentSlide > 0){ base.prev(true); } else if(base.playDirection === "prev" && base.currentSlide === 0){ base.playDirection = "next"; base.next(true); } },base.options.autoPlay); }, swapTransitionSpeed : function(action){ var base = this; if(action === "slideSpeed"){ base.owlWrapper.css(base.addTransition(base.options.slideSpeed)); } else if(action === "paginationSpeed" ){ base.owlWrapper.css(base.addTransition(base.options.paginationSpeed)); } else if(typeof action !== "string"){ base.owlWrapper.css(base.addTransition(action)); } }, addTransition : function(speed){ var base = this; return { "-webkit-transition": "all "+ speed +"ms ease", "-moz-transition": "all "+ speed +"ms ease", "-o-transition": "all "+ speed +"ms ease", "transition": "all "+ speed +"ms ease" }; }, removeTransition : function(){ return { "-webkit-transition": "", "-moz-transition": "", "-o-transition": "", "transition": "" }; }, doTranslate : function(pixels){ return { "-webkit-transform": "translate3d("+pixels+"px, 0px, 0px)", "-moz-transform": "translate3d("+pixels+"px, 0px, 0px)", "-o-transform": "translate3d("+pixels+"px, 0px, 0px)", "-ms-transform": "translate3d("+pixels+"px, 0px, 0px)", "transform": "translate3d("+pixels+"px, 0px,0px)" }; }, transition3d : function(value){ var base = this; base.owlWrapper.css(base.doTranslate(value)); }, css2move : function(value){ var base = this; base.owlWrapper.css({"left" : value}) }, css2slide : function(value,speed){ var base = this; base.isCssFinish = false; base.owlWrapper.stop(true,true).animate({ "left" : value }, { duration : speed || base.options.slideSpeed , complete : function(){ base.isCssFinish = true; } }); }, support3d : function(){ var base = this; var sTranslate3D = "translate3d(0px, 0px, 0px)"; var eTemp = document.createElement("div"); eTemp.style.cssText = " -moz-transform:" + sTranslate3D + "; -ms-transform:" + sTranslate3D + "; -o-transform:" + sTranslate3D + "; -webkit-transform:" + sTranslate3D + "; transform:" + sTranslate3D; var rxTranslate = /translate3d\(0px, 0px, 0px\)/g; var asSupport = eTemp.style.cssText.match(rxTranslate); var bHasSupport = (asSupport !== null && asSupport.length === 1); base.support3d = bHasSupport return bHasSupport; }, checkTouch : function(){ var base = this; base.isTouch = ("ontouchstart" in document.documentElement); }, moveEvents : function(){ var base = this; if(base.options.mouseDraggable || base.isTouch === true){ base.eventTypes(); base.gestures(); base.disabledEvents(); } }, eventTypes : function(){ var base = this; var types; base.ev_types = {}; if(base.isTouch) { types = [ "touchstart.owl", "touchmove.owl", "touchend.owl" ]; } else{ types = [ "mousedown.owl", "mousemove.owl", "mouseup.owl" ]; } base.ev_types["start"] = types[0]; base.ev_types["move"] = types[1]; base.ev_types["end"] = types[2]; }, disabledEvents : function(){ var base = this; if(base.isTouch !== true){ base.$elem.on("dragstart.owl","img", function(event) { event.preventDefault();}); base.$elem.bind("mousedown.disableTextSelect", function() {return false;}); } }, gestures : function(){ var base = this; var locals = { offsetX : 0, offsetY : 0, baseElWidth : 0, relativePos : 0, position: null, minSwipe : null, maxSwipe: null, sliding : null, targetElement : null } base.isCssFinish = true; function getTouches(event){ if(base.isTouch === true){ return { x : event.touches[0].pageX, y : event.touches[0].pageY } } else { if(event.pageX !== undefined){ return { x : event.pageX, y : event.pageY } } else { return { x : event.clientX, y : event.clientY } } } } function swapEvents(type){ if(type === "on"){ $(document).on(base.ev_types["move"], dragMove); $(document).on(base.ev_types["end"], dragEnd); } else if(type === "off"){ $(document).off(base.ev_types["move"]); $(document).off(base.ev_types["end"]); } } function dragStart(event) { var event = event.originalEvent || event || window.event; if(base.isCssFinish === false){ return false; } if(base.isCss3Finish === false){ return false; } if(base.options.autoPlay !== false){ clearInterval(base.autoPlaySpeed); } if(base.isTouch !== true && !base.owlWrapper.hasClass("grabbing")){ base.owlWrapper.addClass("grabbing") } base.newPosX = 0; base.newRelativeX = 0; $(this).css(base.removeTransition()); var position = $(this).position(); locals.relativePos = position.left; locals.offsetX = getTouches(event).x - position.left; locals.offsetY = getTouches(event).y - position.top; swapEvents("on"); locals.sliding = false; locals.targetElement = event.target || event.srcElement; } function dragMove(event){ var event = event.originalEvent || event || window.event; base.newPosX = getTouches(event).x- locals.offsetX; base.newPosY = getTouches(event).y - locals.offsetY; base.newRelativeX = base.newPosX - locals.relativePos; if(base.newRelativeX > 8 || base.newRelativeX < -8 && base.isTouch === true){ event.preventDefault ? event.preventDefault() : event.returnValue = false; locals.sliding = true; } if((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false){ $(document).off("touchmove.owl"); } var minSwipe = function(){ return base.newRelativeX / 5; } var maxSwipe = function(){ return base.maximumPixels + base.newRelativeX / 5; } base.newPosX = Math.max(Math.min( base.newPosX, minSwipe() ), maxSwipe() ); if(base.support3d === true){ base.transition3d(base.newPosX); } else { base.css2move(base.newPosX); } } var dragEnd = function(event){ var event = event.originalEvent || event || window.event; event.target = event.target || event.srcElement; if(base.isTouch !== true){ base.owlWrapper.removeClass("grabbing"); } swapEvents("off"); if(base.newPosX !== 0){ var newPosition = base.getNewPosition(); base.goTo(newPosition); if(locals.targetElement === event.target && base.isTouch !== true){ $(event.target).on("click.disable", function(ev){ ev.stopImmediatePropagation() ev.stopPropagation(); ev.preventDefault(); $(event.target).off("click.disable"); }); var handlers = $._data(event.target, "events")["click"]; var owlStopEvent = handlers.pop(); handlers.splice(0, 0, owlStopEvent); } } } base.$elem.on(base.ev_types["start"], ".owl-wrapper", dragStart); }, clearEvents : function(){ var base = this; base.$elem.off(".owl"); $(document).off(".owl"); }, getNewPosition : function(){ var base = this, newPosition; var newPosition = base.improveClosest(); if(newPosition>base.maximumSlide){ base.currentSlide = base.maximumSlide; newPosition = base.maximumSlide; } else if( base.newPosX >=0 ){ newPosition = 0; base.currentSlide = 0; } return newPosition; }, improveClosest : function(){ var base = this; var array = base.positionsInArray; var goal = base.newPosX; var closest = null; $.each(array, function(i,v){ if( goal - (base.itemWidth/20) > array[i+1] && goal - (base.itemWidth/20)< v && base.moveDirection() === "left") { closest = v; base.currentSlide = i; } else if (goal + (base.itemWidth/20) < v && goal + (base.itemWidth/20) > array[i+1] && base.moveDirection() === "right"){ closest = array[i+1]; base.currentSlide = i+1; } }); return base.currentSlide; }, moveDirection : function(){ var base = this, direction; if(base.newRelativeX < 0 ){ direction = "right" base.playDirection = "next" } else { direction = "left" base.playDirection = "prev" } return direction }, customEvents : function(){ var base = this; base.$elem.on("owl.next",function(){ base.next(); }); base.$elem.on("owl.prev",function(){ base.prev(); }); base.$elem.on("owl.play",function(event,speed){ base.options.autoPlay = speed; base.play(); base.hoverStatus = "play"; }); base.$elem.on("owl.stop",function(){ base.stop(); base.hoverStatus = "stop"; }); }, stopOnHover : function(){ var base = this; if(base.options.stopOnHover === true && base.isTouch === false && base.options.autoPlay !== false){ base.$elem.on("mouseover", function(){ base.stop(); }); base.$elem.on("mouseout", function(){ if(base.hoverStatus !== "stop"){ base.play(); } }); } }, lazyLoad : function(){ var base = this; if(base.options.lazyLoad === false){ return false; } for(var i=0; i= base.currentSlide; }else { follow = true; } if(follow && itemNumber < base.currentSlide + base.options.items){ item.data("owl-loaded", "loaded"); var link = lazyImg.data("src"); if(link){ lazyImg[0].src = link; lazyImg.removeAttr("data-src"); } lazyImg.fadeIn(200); item.removeClass("loading"); } } }, autoHeight : function(){ var base = this; if(base.options.autoHeight === true){ var itemHeight = $(base.owlItems[base.currentSlide]).css("height"); base.wrapperOuter.css("height",itemHeight); setTimeout(function(){ if(itemHeight !== $(base.owlItems[base.currentSlide]).css("height")){ base.wrapperOuter.css("height",itemHeight); } },400); setTimeout(function(){ if(!base.wrapperOuter.hasClass("autoHeight")){ base.wrapperOuter.addClass("autoHeight"); } },0); } }, addActiveClass : function(){ var base = this; $(base.owlItems).removeClass('active'); $(base.owlItems[base.currentSlide]).addClass('active'); } }; $.fn.owlCarousel = function( options ){ return this.each(function() { var carousel = Object.create( Carousel ); carousel.init( options, this ); $.data( this, "owlCarousel", carousel ); }); }; $.fn.owlCarousel.options = { items : 5, itemsDesktop : [1199,4], itemsDesktopSmall : [979,3], itemsTablet: [768,2], itemsMobile : [479,1], singleItem:false, slideSpeed : 200, paginationSpeed : 800, autoPlay : false, stopOnHover : false, goToFirst : true, goToFirstSpeed : 1000, navigation : false, navigationText : ["prev","next"], goToFirstNav : true, scrollPerPage : false, pagination : true, paginationNumbers: false, responsive: true, responsiveRefreshRate : 200, baseClass : "owl-carousel", theme : "owl-theme", lazyLoad : false, lazyFollow : true, autoHeight : false, jsonPath : false, jsonSuccess : false, mouseDraggable : true, beforeInit : false, afterInit : false, beforeMove: false, afterMove: false, afterAction : false }; })( jQuery, window, document );