1/* 2 * jQuery Sticky Header v1.0.1 3 * Author: Danish Iqbal 4 * Website: http://plugins.imdanishiqbal.com/sticky-header 5 * 6 * Licensed under MIT 7 * 8 */ 9(function($) { 10 "use strict"; 11 $.fn.stickMe = function(options) { 12 // Assigning variables 13 var $window = $(window), 14 $document = $(document), 15 $elemTopOffset, 16 $body = $('body'), 17 position = 0, 18 $elem = this, 19 $elemHeight = $elem.innerHeight(), 20 $win_center = $window.height() / 2, 21 $pos, 22 settings = $.extend({ 23 transitionDuration: 300, 24 shadow: false, 25 shadowOpacity: 0.3, 26 animate: true, 27 triggerAtCenter: true, 28 topOffset: $elemHeight, 29 transitionStyle: 'fade', 30 stickyAlready: false 31 }, options); 32 // Initial state 33 $elem 34 .addClass('stick-me') 35 .addClass('not-sticking'); 36 switch (settings.triggerAtCenter) { 37 case (settings.triggerAtCenter && settings.topOffset < $elemHeight) || (settings.triggerAtCenter && settings.topOffset > $elemHeight): 38 settings.triggerAtCenter = false; 39 break; 40 } 41 if (settings.stickyAlready) { 42 settings.triggerAtCenter = false; 43 settings.topOffset = 0; 44 stick(); 45 } 46 47 $elemTopOffset = $elem.offset().top; 48 49 function $elem_slide() { 50 if (settings.animate === true && settings.transitionStyle === 'slide' && settings.stickyAlready !== true) { 51 $elem.slideDown(settings.transitionDuration); 52 } 53 if (settings.animate === true && settings.transitionStyle === 'fade' && settings.stickyAlready !== true) { 54 $elem.fadeIn(settings.transitionDuration); 55 } else { 56 $elem.show(); 57 } 58 $elem.removeClass('not-sticking'); 59 } 60 61 function stick() { 62 if ($elem.hasClass('sticking')) { 63 $elem.trigger('sticking'); 64 } 65 if (position === 0) { 66 position = 1; 67 if(settings.stickyAlready === false) { 68 $elem.trigger('sticky-begin'); 69 } 70 } 71 if ($elem.hasClass('not-sticking')) { 72 $elem.hide(); 73 $elem_slide(); 74 } 75 if (settings.shadow === true) { 76 $elem.css('box-shadow', '0px 1px 2px rgba(0,0,0,' + settings.shadowOpacity + ')'); 77 } 78 $elem 79 .addClass('sticking') 80 .css('position', 'fixed') 81 .css('top', '0'); 82 $body.css('padding-top', $elemHeight); 83 } 84 85 function unstick() { 86 if (settings.shadow === true) { 87 $elem.css('box-shadow', 'none'); 88 } 89 $elem.addClass('not-sticking') 90 .removeClass('sticking') 91 .show() 92 .css('position', 'relative'); 93 $body.css('padding-top', '0'); 94 } 95 $window.scroll(function() { 96 $pos = $window.scrollTop(); 97 if ($pos === 0) { 98 position = 0; 99 $elem.trigger('top-reached'); 100 } 101 if (settings.triggerAtCenter === true) { 102 if ($pos > $win_center + $elemHeight) { 103 stick(); 104 } 105 } 106 if (settings.triggerAtCenter === false) { 107 if ($pos > settings.topOffset) { 108 stick(); 109 } 110 } 111 if ($pos + $window.height() > $document.height() - 1) { 112 $elem.trigger('bottom-reached'); 113 } 114 if (settings.triggerAtCenter === true) { 115 if ($pos < (1 + $elemTopOffset)) { 116 unstick(); 117 } 118 } 119 if (settings.triggerAtCenter === false) { 120 if ($pos < 1) { 121 if (settings.stickyAlready !== true) { 122 unstick(); 123 } 124 } 125 } 126 }); 127 return this; 128 }; 129}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.