1/* jSticky Plugin 2 * ============= 3 * Author: Andrew Henderson (@AndrewHenderson) 4 * Contributor: Mike Street (@mikestreety) 5 * Date: 9/7/2012 6 * Update: 09/20/2016 7 * Website: http://github.com/andrewhenderson/jsticky/ 8 * Description: A jQuery plugin that keeps select DOM 9 * element(s) in view while scrolling the page. 10 */ 11 12;(function($) { 13 14 $.fn.jetStickySection = function(options) { 15 var defaults = { 16 topSpacing: 0, // No spacing by default 17 zIndex: '', // No default z-index 18 stopper: $('.sticky-stopper'), // Default stopper class, also accepts number value 19 stickyClass: false // Class applied to element when it's stuck 20 }; 21 var settings = $.extend({}, defaults, options); // Accepts custom stopper id or class 22 23 // Checks if custom z-index was defined 24 function checkIndex() { 25 if (typeof settings.zIndex == 'number') { 26 return true; 27 } else { 28 return false; 29 } 30 } 31 32 var hasIndex = checkIndex(); // True or false 33 34 // Checks if a stopper exists in the DOM or number defined 35 function checkStopper() { 36 if (0 < settings.stopper.length || typeof settings.stopper === 'number') { 37 return true; 38 } else { 39 return false; 40 } 41 } 42 var hasStopper = checkStopper(); // True or false 43 44 return this.each(function() { 45 46 var $this = $(this); 47 var topSpacing = settings.topSpacing; 48 var thisHeight = $this.outerHeight(); 49 var thisWidth = $this.outerWidth(); 50 var zIndex = settings.zIndex; 51 var pushPoint = $this.offset().top - topSpacing; // Point at which the sticky element starts pushing 52 var placeholder = $('<div></div>').width(thisWidth ).height(thisHeight).addClass('sticky-placeholder'); // Cache a clone sticky element 53 var stopper = settings.stopper; 54 var $window = $(window); 55 var detached = false; 56 var stick = false; 57 58 function stickyScroll() { 59 if (detached) { 60 return; 61 } 62 63 var thisHeight = $this.outerHeight(); 64 var windowTop = $window.scrollTop(); // Check window's scroll position 65 var stopPoint = stopper; 66 var parentWidth = $this.parent().width(); 67 68 placeholder.width(parentWidth); 69 70 if ( hasStopper && typeof settings.stopper !== 'number' ) { 71 var stopperTop = stopper.offset().top; 72 stopPoint = (stopperTop - thisHeight) - topSpacing; 73 } 74 75 if (pushPoint < windowTop) { 76 // Create a placeholder for sticky element to occupy vertical real estate 77 if(settings.stickyClass) 78 $this.addClass(settings.stickyClass); 79 80 $this.after(placeholder ).css({ 81 position: 'fixed', 82 top: topSpacing, 83 width: parentWidth 84 }); 85 86 if (hasIndex) { 87 $this.css({ 88 zIndex: zIndex 89 }); 90 } 91 92 if (hasStopper) { 93 if (stopPoint < windowTop) { 94 var diff = (stopPoint - windowTop) + topSpacing; 95 $this.css({ 96 top: diff 97 }); 98 } 99 } 100 if ( ! stick ) { 101 $this.trigger( 'jetStickySection:stick' ); 102 } 103 stick = true; 104 } else { 105 if(settings.stickyClass) 106 $this.removeClass(settings.stickyClass); 107 108 $this.css({ 109 position: '', 110 top: '', 111 left: '', 112 width: '' 113 }); 114 115 placeholder.remove(); 116 if ( stick ) { 117 $this.trigger( 'jetStickySection:unstick' ); 118 } 119 stick = false; 120 } 121 } 122 123 function detachStickyScroll() { 124 detached = true; 125 //$window.off('load', stickyScroll); 126 $window.off('scroll', stickyScroll); 127 $window.off('touchmove', stickyScroll); 128 $window.off('resize', stickyScroll); 129 130 if(settings.stickyClass) 131 $this.removeClass(settings.stickyClass); 132 133 $this.css({ 134 position: '', 135 top: '', 136 left: '', 137 width: '' 138 }); 139 140 placeholder.remove(); 141 } 142 143 if($window.innerHeight() > thisHeight) { 144 //$window.on('load', stickyScroll); 145 $this.on( 'jetStickySection:activated', stickyScroll ); 146 147 $window.on('scroll', stickyScroll); 148 $window.on('touchmove', stickyScroll); 149 $window.on('resize', stickyScroll); 150 151 $this.on( 'jetStickySection:detach', detachStickyScroll ); 152 } 153 });
154 }; 155})(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.