diff --git a/jquery-scrolltofixed-min.js b/jquery-scrolltofixed-min.js index 6b6fa8d..02d99d4 100644 --- a/jquery-scrolltofixed-min.js +++ b/jquery-scrolltofixed-min.js @@ -1 +1 @@ -(function(a){a.isScrollToFixed=function(b){return !!a(b).data("ScrollToFixed")};a.ScrollToFixed=function(d,i){var m=this;m.$el=a(d);m.el=d;m.$el.data("ScrollToFixed",m);var c=false;var H=m.$el;var I;var F;var k;var e;var z;var E=0;var r=0;var j=-1;var f=-1;var u=null;var A;var g;function v(){H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");f=-1;E=H.offset().top;r=H.offset().left;if(m.options.offsets){r+=(H.offset().left-H.position().left)}if(j==-1){j=r}I=H.css("position");c=true;if(m.options.bottom!=-1){H.trigger("preFixed.ScrollToFixed");x();H.trigger("fixed.ScrollToFixed")}}function o(){var J=m.options.limit;if(!J){return 0}if(typeof(J)==="function"){return J.apply(H)}return J}function q(){return I==="fixed"}function y(){return I==="absolute"}function h(){return !(q()||y())}function x(){if(!q()){var J=H[0].getBoundingClientRect();u.css({display:H.css("display"),width:J.width,height:J.height,"float":H.css("float")});cssOptions={"z-index":m.options.zIndex,position:"fixed",top:m.options.bottom==-1?t():"",bottom:m.options.bottom==-1?"":m.options.bottom,"margin-left":"0px"};if(!m.options.dontSetWidth){cssOptions.width=H.css("width")}H.css(cssOptions);H.addClass(m.options.baseClassName);if(m.options.className){H.addClass(m.options.className)}I="fixed"}}function b(){var K=o();var J=r;if(m.options.removeOffsets){J="";K=K-E}cssOptions={position:"absolute",top:K,left:J,"margin-left":"0px",bottom:""};if(!m.options.dontSetWidth){cssOptions.width=H.css("width")}H.css(cssOptions);I="absolute"}function l(){if(!h()){f=-1;u.css("display","none");H.css({"z-index":z,width:"",position:F,left:"",top:e,"margin-left":""});H.removeClass("scroll-to-fixed-fixed");if(m.options.className){H.removeClass(m.options.className)}I=null}}function w(J){if(J!=f){H.css("left",r-J);f=J}}function t(){var J=m.options.marginTop;if(!J){return 0}if(typeof(J)==="function"){return J.apply(H)}return J}function B(){if(!a.isScrollToFixed(H)||H.is(":hidden")){return}var M=c;var L=h();if(!c){v()}else{if(h()){E=H.offset().top;r=H.offset().left}}var J=a(window).scrollLeft();var N=a(window).scrollTop();var K=o();if(m.options.minWidth&&a(window).width()m.options.maxWidth){if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}else{if(m.options.bottom==-1){if(K>0&&N>=K-t()){if(!L&&(!y()||!M)){p();H.trigger("preAbsolute.ScrollToFixed");b();H.trigger("unfixed.ScrollToFixed")}}else{if(N>=E-t()){if(!q()||!M){p();H.trigger("preFixed.ScrollToFixed");x();f=-1;H.trigger("fixed.ScrollToFixed")}w(J)}else{if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}}}else{if(K>0){if(N+a(window).height()-H.outerHeight(true)>=K-(t()||-n())){if(q()){p();H.trigger("preUnfixed.ScrollToFixed");if(F==="absolute"){b()}else{l()}H.trigger("unfixed.ScrollToFixed")}}else{if(!q()){p();H.trigger("preFixed.ScrollToFixed");x()}w(J);H.trigger("fixed.ScrollToFixed")}}else{w(J)}}}}}function n(){if(!m.options.bottom){return 0}return m.options.bottom}function p(){var J=H.css("position");if(J=="absolute"){H.trigger("postAbsolute.ScrollToFixed")}else{if(J=="fixed"){H.trigger("postFixed.ScrollToFixed")}else{H.trigger("postUnfixed.ScrollToFixed")}}}var D=function(J){if(H.is(":visible")){c=false;B()}else{l()}};var G=function(J){(!!window.requestAnimationFrame)?requestAnimationFrame(B):B()};var C=function(){var K=document.body;if(document.createElement&&K&&K.appendChild&&K.removeChild){var M=document.createElement("div");if(!M.getBoundingClientRect){return null}M.innerHTML="x";M.style.cssText="position:fixed;top:100px;";K.appendChild(M);var N=K.style.height,O=K.scrollTop;K.style.height="3000px";K.scrollTop=500;var J=M.getBoundingClientRect().top;K.style.height=N;var L=(J===100);K.removeChild(M);K.scrollTop=O;return L}return null};var s=function(J){J=J||window.event;if(J.preventDefault){J.preventDefault()}J.returnValue=false};m.init=function(){m.options=a.extend({},a.ScrollToFixed.defaultOptions,i);z=H.css("z-index");m.$el.css("z-index",m.options.zIndex);u=a("
");I=H.css("position");F=H.css("position");k=H.css("float");e=H.css("top");if(h()){m.$el.after(u)}a(window).bind("resize.ScrollToFixed",D);a(window).bind("scroll.ScrollToFixed",G);if("ontouchmove" in window){a(window).bind("touchmove.ScrollToFixed",B)}if(m.options.preFixed){H.bind("preFixed.ScrollToFixed",m.options.preFixed)}if(m.options.postFixed){H.bind("postFixed.ScrollToFixed",m.options.postFixed)}if(m.options.preUnfixed){H.bind("preUnfixed.ScrollToFixed",m.options.preUnfixed)}if(m.options.postUnfixed){H.bind("postUnfixed.ScrollToFixed",m.options.postUnfixed)}if(m.options.preAbsolute){H.bind("preAbsolute.ScrollToFixed",m.options.preAbsolute)}if(m.options.postAbsolute){H.bind("postAbsolute.ScrollToFixed",m.options.postAbsolute)}if(m.options.fixed){H.bind("fixed.ScrollToFixed",m.options.fixed)}if(m.options.unfixed){H.bind("unfixed.ScrollToFixed",m.options.unfixed)}if(m.options.spacerClass){u.addClass(m.options.spacerClass)}H.bind("resize.ScrollToFixed",function(){u.height(H.height())});H.bind("scroll.ScrollToFixed",function(){H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");B()});H.bind("detach.ScrollToFixed",function(J){s(J);H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");a(window).unbind("resize.ScrollToFixed",D);a(window).unbind("scroll.ScrollToFixed",G);H.unbind(".ScrollToFixed");u.remove();m.$el.removeData("ScrollToFixed")});D()};m.init()};a.ScrollToFixed.defaultOptions={marginTop:0,limit:0,bottom:-1,zIndex:1000,baseClassName:"scroll-to-fixed-fixed"};a.fn.scrollToFixed=function(b){return this.each(function(){(new a.ScrollToFixed(this,b))})}})(jQuery); \ No newline at end of file +!function(a){a.isScrollToFixed=function(b){return!!a(b).data("ScrollToFixed")},a.ScrollToFixed=function(b,c){function s(){f.trigger("preUnfixed.ScrollToFixed"),z(),f.trigger("unfixed.ScrollToFixed"),o=-1,l=f.offset().top,m=f.offset().left,d.options.offsets&&(m+=f.offset().left-f.position().left),-1==n&&(n=m),g=f.css("position"),e=!0,-1!=d.options.bottom&&(f.trigger("preFixed.ScrollToFixed"),x(),f.trigger("fixed.ScrollToFixed"))}function t(){var a=d.options.limit;return a?"function"==typeof a?a.apply(f):a:0}function u(){return"fixed"===g}function v(){return"absolute"===g}function w(){return!(u()||v())}function x(){if(!u()){var a=f[0].getBoundingClientRect();p.css({display:f.css("display"),width:a.width,height:a.height,float:f.css("float")}),cssOptions={"z-index":d.options.zIndex,position:"fixed",top:-1==d.options.bottom?B():"",bottom:-1==d.options.bottom?"":d.options.bottom,"margin-left":"0px"},d.options.dontSetWidth||(cssOptions.width=f.css("width")),f.css(cssOptions),d.options.fade&&f.fadeIn(300),f.addClass(d.options.baseClassName),d.options.className&&f.addClass(d.options.className),g="fixed"}}function y(){var a=t(),b=m;d.options.removeOffsets&&(b="",a-=l),cssOptions={position:"absolute",top:a,left:b,"margin-left":"0px",bottom:""},d.options.dontSetWidth||(cssOptions.width=f.css("width")),d.options.fade?f.fadeOut(300,function(){f.css(cssOptions)}):f.css(cssOptions),g="absolute"}function z(){w()||(o=-1,p.css("display","none"),f.css({"z-index":k,width:"",position:h,left:"",top:j,"margin-left":""}),f.removeClass("scroll-to-fixed-fixed"),d.options.className&&f.removeClass(d.options.className),g=null)}function A(a){a!=o&&(f.css("left",m-a),o=a)}function B(){var a=d.options.marginTop;return a?"function"==typeof a?a.apply(f):a:0}function C(){if(a.isScrollToFixed(f)&&(!f.is(":hidden")||d.options.fade)){var b=e,c=w();e?w()&&(l=f.offset().top,m=f.offset().left):s();var g=a(window).scrollLeft(),i=a(window).scrollTop(),j=t();d.options.minWidth&&a(window).width()d.options.maxWidth?w()&&b||(E(),f.trigger("preUnfixed.ScrollToFixed"),z(),f.trigger("unfixed.ScrollToFixed")):-1==d.options.bottom?j>0&&i>=j-B()?c||v()&&b||(E(),f.trigger("preAbsolute.ScrollToFixed"),y(),f.trigger("unfixed.ScrollToFixed")):i>=l-B()?(u()&&b||(E(),f.trigger("preFixed.ScrollToFixed"),x(),o=-1,f.trigger("fixed.ScrollToFixed")),A(g)):w()&&b||(E(),f.trigger("preUnfixed.ScrollToFixed"),z(),f.trigger("unfixed.ScrollToFixed")):j>0?i+a(window).height()-f.outerHeight(!0)>=j-(B()||-D())?u()&&(E(),f.trigger("preUnfixed.ScrollToFixed"),"absolute"===h?y():z(),f.trigger("unfixed.ScrollToFixed")):(u()||(E(),f.trigger("preFixed.ScrollToFixed"),x()),A(g),f.trigger("fixed.ScrollToFixed")):A(g)}}function D(){return d.options.bottom?d.options.bottom:0}function E(){var a=f.css("position");"absolute"==a?f.trigger("postAbsolute.ScrollToFixed"):"fixed"==a?f.trigger("postFixed.ScrollToFixed"):f.trigger("postUnfixed.ScrollToFixed")}var d=this;d.$el=a(b),d.el=b,d.$el.data("ScrollToFixed",d);var g,h,i,j,k,e=!1,f=d.$el,l=0,m=0,n=-1,o=-1,p=null,F=function(a){f.is(":visible")?(e=!1,C()):z()},G=function(a){window.requestAnimationFrame?requestAnimationFrame(C):C()},I=function(a){a=a||window.event,a.preventDefault&&a.preventDefault(),a.returnValue=!1};d.init=function(){d.options=a.extend({},a.ScrollToFixed.defaultOptions,c),k=f.css("z-index"),d.$el.css("z-index",d.options.zIndex),p=a("
"),g=f.css("position"),h=f.css("position"),i=f.css("float"),j=f.css("top"),w()&&d.$el.after(p),a(window).bind("resize.ScrollToFixed",F),a(window).bind("scroll.ScrollToFixed",G),"ontouchmove"in window&&a(window).bind("touchmove.ScrollToFixed",C),d.options.preFixed&&f.bind("preFixed.ScrollToFixed",d.options.preFixed),d.options.postFixed&&f.bind("postFixed.ScrollToFixed",d.options.postFixed),d.options.preUnfixed&&f.bind("preUnfixed.ScrollToFixed",d.options.preUnfixed),d.options.postUnfixed&&f.bind("postUnfixed.ScrollToFixed",d.options.postUnfixed),d.options.preAbsolute&&f.bind("preAbsolute.ScrollToFixed",d.options.preAbsolute),d.options.postAbsolute&&f.bind("postAbsolute.ScrollToFixed",d.options.postAbsolute),d.options.fixed&&f.bind("fixed.ScrollToFixed",d.options.fixed),d.options.unfixed&&f.bind("unfixed.ScrollToFixed",d.options.unfixed),d.options.spacerClass&&p.addClass(d.options.spacerClass),f.bind("resize.ScrollToFixed",function(){p.height(f.height())}),f.bind("scroll.ScrollToFixed",function(){f.trigger("preUnfixed.ScrollToFixed"),z(),f.trigger("unfixed.ScrollToFixed"),C()}),f.bind("detach.ScrollToFixed",function(b){I(b),f.trigger("preUnfixed.ScrollToFixed"),z(),f.trigger("unfixed.ScrollToFixed"),a(window).unbind("resize.ScrollToFixed",F),a(window).unbind("scroll.ScrollToFixed",G),f.unbind(".ScrollToFixed"),p.remove(),d.$el.removeData("ScrollToFixed")}),F()},d.init()},a.ScrollToFixed.defaultOptions={marginTop:0,limit:0,bottom:-1,zIndex:1e3,baseClassName:"scroll-to-fixed-fixed"},a.fn.scrollToFixed=function(b){return this.each(function(){new a.ScrollToFixed(this,b)})}}(jQuery); \ No newline at end of file diff --git a/jquery-scrolltofixed.js b/jquery-scrolltofixed.js index aee7fa0..afe6a81 100644 --- a/jquery-scrolltofixed.js +++ b/jquery-scrolltofixed.js @@ -151,11 +151,14 @@ 'top' : base.options.bottom == -1?getMarginTop():'', 'bottom' : base.options.bottom == -1?'':base.options.bottom, 'margin-left' : '0px' - } + }; if (!base.options.dontSetWidth){ cssOptions['width']=target.css('width'); }; target.css(cssOptions); + // fadeIn if fade option is set to true + if (base.options.fade) {target.fadeIn(300);} + target.addClass(base.options.baseClassName); if (base.options.className) { @@ -182,10 +185,18 @@ 'left' : left, 'margin-left' : '0px', 'bottom' : '' - } + }; if (!base.options.dontSetWidth){ cssOptions['width']=target.css('width'); }; - target.css(cssOptions); + // fadeOut if fade option is set to true + if (base.options.fade) { + //Ensure fade out occurs prior to modifying css + target.fadeOut(300, function(){ + target.css(cssOptions); + }); + } else { + target.css(cssOptions); + } position = 'absolute'; } @@ -248,7 +259,7 @@ // Checks to see if we need to do something based on new scroll position // of the page. function checkScroll() { - if (!$.isScrollToFixed(target) || target.is(':hidden')) return; + if (!$.isScrollToFixed(target) || (target.is(':hidden') && !base.options.fade)) return; var wasReset = isReset; var wasUnfixed = isUnfixed();