diff --git a/js/jquery.featureCarousel.js b/js/jquery.featureCarousel.js index 57fc50d..f4fbee0 100644 --- a/js/jquery.featureCarousel.js +++ b/js/jquery.featureCarousel.js @@ -23,7 +23,7 @@ // override the default options with user defined options options = $.extend({}, $.fn.featureCarousel.defaults, options || {}); - /* These are universal values that are used throughout the plugin. Do not modify them + /* These are univeral values that are used throughout the plugin. Do not modify them * unless you know what you're doing. Most of them feed off the options * so most customization can be achieved by modifying the options values */ var pluginData = { @@ -516,9 +516,6 @@ $newRight.css("z-index", 3); } $newCenter.css("z-index", 4); - - // Fire moving to center event - options.movingToCenter($newCenter); // Animate the features into their new positions animateFeature($newLeft, direction); @@ -565,14 +562,16 @@ } // Move to the left if left button clicked - $(options.leftButtonTag).on('click',function () { - initiateMove(false,1); - }); + var leftButtons = $(options.leftButtonTag); + var leftButtonHandler = function () { initiateMove(false,1); }; + if (options.jqModern) { leftButtons.on('click', null, leftButtonHandler); } + else { leftButtons.live('click', leftButtonHandler); } // Move to right if right button clicked - $(options.rightButtonTag).on('click',function () { - initiateMove(true,1); - }); + var rightButtons = $(options.rightButtonTag); + var rightButtonHandler = function () { initiateMove(true,1); }; + if (options.jqModern) { rightButtons.on('click', null, rightButtonHandler); } + else { rightButtons.live('click', rightButtonHandler); } // These are the click and hover events for the features pluginData.featuresContainer.find(".carousel-feature") @@ -611,7 +610,8 @@ // Add event listener to all clicks within the features container // This is done to disable any links that aren't within the center feature - $("a", pluginData.containerIDTag).on("click", function (event) { + var container = $("a", pluginData.containerIDTag); + var containerClickHandler = function (event) { // travel up to the container var $parents = $(this).parentsUntil(pluginData.containerIDTag); // now check each of the feature divs within it @@ -636,10 +636,13 @@ } } }); - }); + }; + if (options.jqModern) { container.on('click', null, containerClickHandler); } + else { container.live('click', containerClickHandler); } // Did someone click one of the individual trackers? - $(".tracker-individual-blip", pluginData.containerIDTag).on("click",function () { + var trackers = $(".tracker-individual-blip", pluginData.containerIDTag); + var trackerClickHandler = function () { // grab the position # that was clicked var goTo = $(this).attr("id").substring(8); // find out where that feature # actually is in the carousel right now @@ -657,8 +660,9 @@ initiateMove(true,shortest); } } - - }); + }; + if (options.jqModern) { trackers.on('click', null, trackerClickHandler); } + else { trackers.live('click', trackerClickHandler); } /**************** PUBLIC FUNCTIONS @@ -748,8 +752,8 @@ leavingCenter: $.noop, // callback function for when center feature was clicked clickedCenter: $.noop, - // callback function for when a feature has start moving to center - movingToCenter: $.noop + // use $().on for jQuery >= 1.7, $().live for jQuery < 1.7 + jqModern: 'undefined' !== typeof jQuery.fn.on }; -})(jQuery); +})(jQuery); \ No newline at end of file diff --git a/js/jquery.featureCarousel.min.js b/js/jquery.featureCarousel.min.js index e788929..66b11bd 100644 --- a/js/jquery.featureCarousel.min.js +++ b/js/jquery.featureCarousel.min.js @@ -8,4 +8,4 @@ * * http://www.gnu.org/licenses/gpl.txt */ -(function(a){a.fn.featureCarousel=function(f){if(this.length>1){this.each(function(){a(this).featureCarousel(f)});return this}f=a.extend({},a.fn.featureCarousel.defaults,f||{});var q={currentCenterNum:f.startingFeature,containerWidth:0,containerHeight:0,largeFeatureWidth:0,largeFeatureHeight:0,smallFeatureWidth:0,smallFeatureHeight:0,totalFeatureCount:a(this).children("div").length,currentlyMoving:false,featuresContainer:a(this),featuresArray:[],containerIDTag:"#"+a(this).attr("id"),timeoutVar:null,rotationsRemaining:0,itemsToAnimate:0,borderWidth:0};var j=function(w){if(f.preload==true){var u=q.featuresContainer.find("img");var t=0;var v=u.length;u.each(function(y,z){var x=new Image();a(x).bind("load error",function(){t++;if(t==v){w()}});x.src=z.src})}else{w()}};var m=function(t){return q.featuresArray[t-1]};var n=function(t){a.each(q.featuresArray,function(){if(a(this).data().setPosition==t){return a(this)}})};var c=function(t){if((t-1)==0){return q.totalFeatureCount}else{return t-1}};var i=function(t){if((t+1)>q.totalFeatureCount){return 1}else{return t+1}};var e=function(){q.containerWidth=q.featuresContainer.width();q.containerHeight=q.featuresContainer.height();var t=a(q.containerIDTag).find(".carousel-image:first");if(f.largeFeatureWidth>1){q.largeFeatureWidth=f.largeFeatureWidth}else{if(f.largeFeatureWidth>0&&f.largeFeatureWidth<1){q.largeFeatureWidth=t.width()*f.largeFeatureWidth}else{q.largeFeatureWidth=t.outerWidth()}}if(f.largeFeatureHeight>1){q.largeFeatureHeight=f.largeFeatureHeight}else{if(f.largeFeatureHeight>0&&f.largeFeatureHeight<1){q.largeFeatureHeight=t.height()*f.largeFeatureHeight}else{q.largeFeatureHeight=t.outerHeight()}}if(f.smallFeatureWidth>1){q.smallFeatureWidth=f.smallFeatureWidth}else{if(f.smallFeatureWidth>0&&f.smallFeatureWidth<1){q.smallFeatureWidth=t.width()*f.smallFeatureWidth}else{q.smallFeatureWidth=t.outerWidth()/2}}if(f.smallFeatureHeight>1){q.smallFeatureHeight=f.smallFeatureHeight}else{if(f.smallFeatureHeight>0&&f.smallFeatureHeight<1){q.smallFeatureHeight=t.height()*f.smallFeatureHeight}else{q.smallFeatureHeight=t.outerHeight()/2}}};var b=function(){if(f.displayCutoff>0&&f.displayCutoff");x.addClass("numberTag");x.html("("+y+" of "+q.totalFeatureCount+") ");a(this).find(".carousel-caption p").prepend(x)})}};var h=function(){if(f.trackerIndividual){var z=a("");z.addClass("tracker-individual-container");for(var y=0;y"+t+"");x.addClass("tracker-individual-blip");x.css("cursor","pointer");x.attr("id","tracker-"+(y+1));var w=a("
  • ");w.append(x);w.css("float","left");w.css("list-style-type","none");z.append(w)}a(q.containerIDTag).append(z);z.hide().show()}if(f.trackerSummation){var v=a("
    ");v.addClass("tracker-summation-container");var u=a("").addClass("tracker-summation-current").text(f.startingFeature);var B=a("").addClass("tracker-summation-total").text(q.totalFeatureCount);var A=a("").addClass("tracker-summation-middle").text(" of ");v.append(u).append(A).append(B);a(q.containerIDTag).append(v)}};var s=function(x,t){if(f.trackerIndividual){var u=q.featuresContainer.find(".tracker-individual-container");var v=u.find("#tracker-"+x);var w=u.find("#tracker-"+t);v.removeClass("tracker-individual-blip-selected");w.addClass("tracker-individual-blip-selected")}if(f.trackerSummation){var u=q.featuresContainer.find(".tracker-summation-container");u.find(".tracker-summation-current").text(t)}};var p=function(u){clearTimeout(q.timeoutVar);if(!u&&f.autoPlay!=0){var t=(Math.abs(f.autoPlay)0)?k(true,1):k(false,1)},t)}};var d=function(t){a.each(q.featuresArray,function(){var u;if(t==false){u=i(a(this).data().position)}else{u=c(a(this).data().position)}a(this).data("position",u)})};var o=function(y,C){var w,t,v,z,u,D,A;var B=y.data("position");var x;if(C==true){x=c(B)}else{x=i(B)}if(B==1){f.leavingCenter(y)}if(x==1){w=q.largeFeatureWidth;t=q.largeFeatureHeight;v=f.topPadding;u=y.css("z-index");z=(q.containerWidth/2)-(q.largeFeatureWidth/2)-(q.borderWidth/2);A=1}else{w=q.smallFeatureWidth;t=q.smallFeatureHeight;v=f.smallFeatureOffset+f.topPadding;u=1;A=0.4;if(x==q.totalFeatureCount){z=f.sidePadding}else{if(x==2){z=q.containerWidth-q.smallFeatureWidth-f.sidePadding-q.borderWidth}else{z=(q.containerWidth/2)-(q.smallFeatureWidth/2)-(q.borderWidth/2);A=0}}}if(B==1){y.find(".carousel-caption").hide()}y.animate({width:w,height:t,top:v,left:z,opacity:A},f.carouselSpeed,f.animationEasing,function(){if(x==1){if(f.captionBelow){y.css("height","auto")}y.find(".carousel-caption").fadeTo("fast",0.85);f.movedToCenter(y)}q.rotationsRemaining=q.rotationsRemaining-1;y.css("z-index",u);if(f.trackerIndividual||f.trackerSummation){if(x==1){var E=q.featuresContainer.find(".carousel-feature").index(y)+1;var F;if(C==false){F=i(E)}else{F=c(E)}s(F,E)}}var G=q.rotationsRemaining/q.itemsToAnimate;if(G%1==0){q.currentlyMoving=false;d(C);if(q.rotationsRemaining>0){l(C)}}p(false)}).find(".carousel-image").animate({width:w,height:t},f.carouselSpeed,f.animationEasing).end()};var l=function(w){q.currentlyMoving=true;var x,v,t,u;if(w==true){x=m(i(q.currentCenterNum));v=m(q.currentCenterNum);t=m(i(i(q.currentCenterNum)));u=m(c(q.currentCenterNum));q.currentCenterNum=i(q.currentCenterNum)}else{x=m(c(q.currentCenterNum));v=m(c(c(q.currentCenterNum)));t=m(q.currentCenterNum);u=m(i(q.currentCenterNum));q.currentCenterNum=c(q.currentCenterNum)}if(w){v.css("z-index",3)}else{t.css("z-index",3)}x.css("z-index",4);o(v,w);o(x,w);o(t,w);if(q.totalFeatureCount>3){o(u,w)}};var k=function(v,u){if(q.currentlyMoving==false){var t=u*q.itemsToAnimate;q.rotationsRemaining=t;l(v)}};var g=function(x,w){var u=1,t=1,v;v=x;while((v=c(v))!=w){u++}v=x;while((v=i(v))!=w){t++}return(u1)return this.each(function(){t(this).featureCarousel(e)}),this;e=t.extend({},t.fn.featureCarousel.defaults,e||{});var a={currentCenterNum:e.startingFeature,containerWidth:0,containerHeight:0,largeFeatureWidth:0,largeFeatureHeight:0,smallFeatureWidth:0,smallFeatureHeight:0,totalFeatureCount:t(this).children("div").length,currentlyMoving:!1,featuresContainer:t(this),featuresArray:[],containerIDTag:"#"+t(this).attr("id"),timeoutVar:null,rotationsRemaining:0,itemsToAnimate:0,borderWidth:0},i=function(i){if(1==e.preload){var r=a.featuresContainer.find("img"),n=0,o=r.length;r.each(function(e,a){var r=new Image;t(r).bind("load error",function(){n++,n==o&&i()}),r.src=a.src})}else i()},r=function(t){return a.featuresArray[t-1]},n=function(t){return t-1==0?a.totalFeatureCount:t-1},o=function(t){return t+1>a.totalFeatureCount?1:t+1},u=function(){a.containerWidth=a.featuresContainer.width(),a.containerHeight=a.featuresContainer.height();var i=t(a.containerIDTag).find(".carousel-image:first");a.largeFeatureWidth=e.largeFeatureWidth>1?e.largeFeatureWidth:e.largeFeatureWidth>0&&e.largeFeatureWidth<1?i.width()*e.largeFeatureWidth:i.outerWidth(),a.largeFeatureHeight=e.largeFeatureHeight>1?e.largeFeatureHeight:e.largeFeatureHeight>0&&e.largeFeatureHeight<1?i.height()*e.largeFeatureHeight:i.outerHeight(),a.smallFeatureWidth=e.smallFeatureWidth>1?e.smallFeatureWidth:e.smallFeatureWidth>0&&e.smallFeatureWidth<1?i.width()*e.smallFeatureWidth:i.outerWidth()/2,a.smallFeatureHeight=e.smallFeatureHeight>1?e.smallFeatureHeight:e.smallFeatureHeight>0&&e.smallFeatureHeight<1?i.height()*e.smallFeatureHeight:i.outerHeight()/2},s=function(){e.displayCutoff>0&&e.displayCutoff");i.addClass("numberTag"),i.html("("+e+" of "+a.totalFeatureCount+") "),t(this).find(".carousel-caption p").prepend(i)})},d=function(){if(e.trackerIndividual){var i=t("
      ");i.addClass("tracker-individual-container");for(var r=0;r"+n+"");o.addClass("tracker-individual-blip"),o.css("cursor","pointer"),o.attr("id","tracker-"+(r+1));var u=t("
    • ");u.append(o),u.css("float","left"),u.css("list-style-type","none"),i.append(u)}t(a.containerIDTag).append(i),i.hide().show()}if(e.trackerSummation){var s=t("
      ");s.addClass("tracker-summation-container");var l=t("").addClass("tracker-summation-current").text(e.startingFeature),d=t("").addClass("tracker-summation-total").text(a.totalFeatureCount),c=t("").addClass("tracker-summation-middle").text(" of ");s.append(l).append(c).append(d),t(a.containerIDTag).append(s)}},c=function(t,i){if(e.trackerIndividual){var r=a.featuresContainer.find(".tracker-individual-container"),n=r.find("#tracker-"+t),o=r.find("#tracker-"+i);n.removeClass("tracker-individual-blip-selected"),o.addClass("tracker-individual-blip-selected")}if(e.trackerSummation){var r=a.featuresContainer.find(".tracker-summation-container");r.find(".tracker-summation-current").text(i)}},f=function(t){if(clearTimeout(a.timeoutVar),!t&&0!=e.autoPlay){var i=Math.abs(e.autoPlay)0?p(!0,1):p(!1,1)},i)}},h=function(e){t.each(a.featuresArray,function(){var a;a=0==e?o(t(this).data().position):n(t(this).data().position),t(this).data("position",a)})},g=function(t,i){var r,u,s,l,d,g,p,v=t.data("position");p=1==i?n(v):o(v),1==v&&e.leavingCenter(t),1==p?(r=a.largeFeatureWidth,u=a.largeFeatureHeight,s=e.topPadding,d=t.css("z-index"),l=a.containerWidth/2-a.largeFeatureWidth/2-a.borderWidth/2,g=1):(r=a.smallFeatureWidth,u=a.smallFeatureHeight,s=e.smallFeatureOffset+e.topPadding,d=1,g=.4,p==a.totalFeatureCount?l=e.sidePadding:2==p?l=a.containerWidth-a.smallFeatureWidth-e.sidePadding-a.borderWidth:(l=a.containerWidth/2-a.smallFeatureWidth/2-a.borderWidth/2,g=0)),1==v&&t.find(".carousel-caption").hide(),t.animate({width:r,height:u,top:s,left:l,opacity:g},e.carouselSpeed,e.animationEasing,function(){if(1==p&&(e.captionBelow&&t.css("height","auto"),t.find(".carousel-caption").fadeTo("fast",.85),e.movedToCenter(t)),a.rotationsRemaining=a.rotationsRemaining-1,t.css("z-index",d),(e.trackerIndividual||e.trackerSummation)&&1==p){var r,u=a.featuresContainer.find(".carousel-feature").index(t)+1;r=0==i?o(u):n(u),c(r,u)}var s=a.rotationsRemaining/a.itemsToAnimate;s%1==0&&(a.currentlyMoving=!1,h(i),a.rotationsRemaining>0&&m(i)),f(!1)}).find(".carousel-image").animate({width:r,height:u},e.carouselSpeed,e.animationEasing).end()},m=function(t){a.currentlyMoving=!0;var e,i,u,s;1==t?(e=r(o(a.currentCenterNum)),i=r(a.currentCenterNum),u=r(o(o(a.currentCenterNum))),s=r(n(a.currentCenterNum)),a.currentCenterNum=o(a.currentCenterNum)):(e=r(n(a.currentCenterNum)),i=r(n(n(a.currentCenterNum))),u=r(a.currentCenterNum),s=r(o(a.currentCenterNum)),a.currentCenterNum=n(a.currentCenterNum)),t?i.css("z-index",3):u.css("z-index",3),e.css("z-index",4),g(i,t),g(e,t),g(u,t),a.totalFeatureCount>3&&g(s,t)},p=function(t,e){if(0==a.currentlyMoving){var i=e*a.itemsToAnimate;a.rotationsRemaining=i,m(t)}},v=function(t,e){var a,i=1,r=1;for(a=t;(a=n(a))!=e;)i++;for(a=t;(a=o(a))!=e;)r++;return r>i?-1*i:r},C=t(e.leftButtonTag),F=function(){p(!1,1)};e.jqModern?C.on("click",null,F):C.live("click",F);var W=t(e.rightButtonTag),k=function(){p(!0,1)};e.jqModern?W.on("click",null,k):W.live("click",k),a.featuresContainer.find(".carousel-feature").click(function(){var e=t(this).data("position");2==e?p(!0,1):e==a.totalFeatureCount&&p(!1,1)}).mouseover(function(){if(0==a.currentlyMoving){var i=t(this).data("position");(2==i||i==a.totalFeatureCount)&&t(this).css("opacity",.8)}e.pauseOnHover&&f(!0),e.stopOnHover&&(e.autoPlay=0)}).mouseout(function(){if(0==a.currentlyMoving){var i=t(this).data("position");(2==i||i==a.totalFeatureCount)&&t(this).css("opacity",.4)}e.pauseOnHover&&f(!1)});var y=t("a",a.containerIDTag),H=function(i){var r=t(this).parentsUntil(a.containerIDTag);r.each(function(){var r=t(this).data("position");if(void 0!=r){if(1!=r)return r==a.totalFeatureCount?p(!1,1):2==r&&p(!0,1),i.preventDefault(),!1;e.clickedCenter(t(this))}})};e.jqModern?y.on("click",null,H):y.live("click",H);var T=t(".tracker-individual-blip",a.containerIDTag),b=function(){var e=t(this).attr("id").substring(8),i=a.featuresContainer.find(".carousel-feature").eq(e-1).data("position"),r=a.currentCenterNum;if(e!=r){var n=v(1,i);0>n?p(!1,-1*n):p(!0,n)}};return e.jqModern?T.on("click",null,b):T.live("click",b),this.initialize=function(){return i(function(){u(),s(),l(),d(),p(!0,1)}),this},this.next=function(){p(!0,1)},this.prev=function(){p(!1,1)},this.pause=function(){f(!0)},this.start=function(){f(!1)},this.initialize()},t.fn.featureCarousel.defaults={largeFeatureWidth:0,largeFeatureHeight:0,smallFeatureWidth:.5,smallFeatureHeight:.5,topPadding:20,sidePadding:50,smallFeatureOffset:50,startingFeature:1,carouselSpeed:1e3,autoPlay:4e3,pauseOnHover:!0,stopOnHover:!1,trackerIndividual:!0,trackerSummation:!0,preload:!0,displayCutoff:0,animationEasing:"swing",leftButtonTag:"#carousel-left",rightButtonTag:"#carousel-right",captionBelow:!1,movedToCenter:t.noop,leavingCenter:t.noop,clickedCenter:t.noop,jqModern:"undefined"!=typeof jQuery.fn.on}}(jQuery); \ No newline at end of file