/* * jQuery Sticky Header v1.0.1 * Author: Danish Iqbal * Website: http://plugins.imdanishiqbal.com/sticky-header * * Licensed under MIT * */ (function($) { "use strict"; $.fn.stickMe = function(options) { // Assigning variables var $window = $(window), $document = $(document), $elemTopOffset, $body = $('body'), position = 0, $elem = this, $elemHeight = $elem.innerHeight(), $win_center = $window.height() / 2, $pos, settings = $.extend({ transitionDuration: 300, shadow: false, shadowOpacity: 0.3, animate: true, triggerAtCenter: true, topOffset: $elemHeight, transitionStyle: 'fade', stickyAlready: false, fullWidth: false }, options); // Initial state $elem .addClass('stick-me') .addClass('not-sticking'); switch (settings.triggerAtCenter) { case (settings.triggerAtCenter && settings.topOffset < $elemHeight) || (settings.triggerAtCenter && settings.topOffset > $elemHeight): settings.triggerAtCenter = false; break; } if (settings.stickyAlready) { settings.triggerAtCenter = false; settings.topOffset = 0; stick(); } $elemTopOffset = $elem.offset().top; function $elem_slide() { if (settings.animate === true && settings.transitionStyle === 'slide' && settings.stickyAlready !== true) { $elem.slideDown(settings.transitionDuration); } if (settings.animate === true && settings.transitionStyle === 'fade' && settings.stickyAlready !== true) { $elem.fadeIn(settings.transitionDuration); } else { $elem.show(); } $elem.removeClass('not-sticking'); } function stick() { $elem.css('z-index', '9999'); if(settings.fullWidth === true) { $elem.css('width', '100%'); } if ($elem.hasClass('sticking')) { $elem.trigger('sticking'); } if (position === 0) { position = 1; if(settings.stickyAlready === false) { $elem.trigger('sticky-begin'); } } if ($elem.hasClass('not-sticking')) { $elem.hide(); $elem_slide(); } if (settings.shadow === true) { $elem.css('box-shadow', '0px 1px 2px rgba(0,0,0,' + settings.shadowOpacity + ')'); } $elem .addClass('sticking') .css('position', 'fixed') .css('top', '0'); $body.css('padding-top', $elemHeight); } function unstick() { if (settings.shadow === true) { $elem.css('box-shadow', 'none'); } $elem.addClass('not-sticking') .removeClass('sticking') .show() .css('position', 'relative'); $body.css('padding-top', '0'); } $window.scroll(function() { $pos = $window.scrollTop(); if ($pos === 0) { position = 0; $elem.trigger('top-reached'); } if (settings.triggerAtCenter === true) { if ($pos > $win_center + $elemHeight) { stick(); } } if (settings.triggerAtCenter === false) { if ($pos > settings.topOffset) { stick(); } } if ($pos + $window.height() > $document.height() - 1) { $elem.trigger('bottom-reached'); } if (settings.triggerAtCenter === true) { if ($pos < (1 + $elemTopOffset)) { unstick(); } } if (settings.triggerAtCenter === false) { if ($pos < 1) { if (settings.stickyAlready !== true) { unstick(); } } } }); return this; }; }(jQuery));