/** * Sticky * * Keep interface elements fixed in place as the user scrolls. * * Copyright (c) 2013 Kevin Thompson * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * @author: Kevin Thompson * @link: https://github.com/kevinthompson/jquery.sticky.js * @version: 2.0.0 **/ ;(function(e){e.fn.sticky=function(t){var n={offset:20,mode:"fixed",stopper:"",speed:500,classes:{element:"jquery-sticky-element",start:"jquery-sticky-start",sticky:"jquery-sticky-sticky",stopped:"jquery-sticky-stopped",placeholder:"jquery-sticky-placeholder"},onStick:"",onStart:"",onStop:""};this.each(function(){if(t)e.extend(n,t);if(e(this).parent().hasClass(n.classes.element))return;var r={init:function(t){r.element=t.wrap('
').parent();r.units={start:r.element.offset().top};n.states=[n.classes.start,n.classes.sticky,n.classes.stopped].join(" ");if(n.stopper!=""){var s=e(n.stopper),o;if(s.length>0){for(i=0;ir.element.offset().top+r.element.outerHeight(false)){r.stopper=e(s[i])}}}if(typeof r.stopper!="undefined"&&r.stopper.length>0){o=parseInt(r.stopper.css("margin-top"))||0;r.units.stop=r.stopper.offset().top-o}}r.placeholder=r.element.clone().empty().attr("class",n.classes.placeholder).css({opacity:0,height:r.element.height()}).insertBefore(r.element);r.element.appendTo("body").css({width:r.placeholder.width(),left:r.placeholder.offset().left,top:r.placeholder.offset().top,"margin-bottom":"0px",position:"absolute","z-index":"999"});e(window).bind("resize scroll",function(){r.update()});r.update()},update:function(){var t;r.element.css({width:r.placeholder.width(),left:r.placeholder.offset().left});r.placeholder.css("height",r.element.height());r.units.start=r.placeholder.offset().top;if(r.element.outerHeight(false)+n.offset0){t=parseInt(r.stopper.css("margin-top"))||0;r.units.stop=r.stopper.offset().top-t}if(!r.element.hasClass(n.classes.stopped)&&typeof r.stopper!="undefined"&&r.stopper.length>0&&r.units.doctop+n.offset+r.element.outerHeight(false)>=r.units.stop){r.stop(r.units.stop-r.element.outerHeight(false),"stop");if(typeof n.onStop=="function")n.onStop()}else if(!r.element.hasClass(n.classes.sticky)&&r.units.doctop>r.units.start-n.offset&&(typeof r.stopper=="undefined"||r.stopper.length==0||r.stopper.length>0&&r.units.doctop+n.offset+r.element.outerHeight(false)=r.units.stop){e=r.units.stop-r.element.outerHeight(false)}else if(e<=r.units.start){e=r.units.start}r.element.stop().animate({top:e},n.speed)},100)},stick:function(e){r.element.removeClass(n.states).addClass(n.classes.sticky);if(n.mode=="fixed"){r.element.css({top:e,position:"fixed"})}},stop:function(e,t){r.element.removeClass(n.states).addClass(t=="start"?n.classes.start:n.classes.stopped);if(n.mode=="fixed"){r.element.css({top:e,position:"absolute"})}else{r.animate(t=="start"?r.units.start:r.units.stop-r.element.outerHeight(false))}}};r.init(e(this))})}})(jQuery)