1/*! 2 * jQuery Scrollspy Plugin 3 * Author: @sxalexander 4 * Licensed under the MIT license 5 */ 6 7 8;(function ( $, window, document, undefined ) { 9 10 $.fn.extend({ 11 scrollspy: function ( options ) { 12 13 var defaults = { 14 min: 0, 15 max: 0, 16 mode: 'vertical', 17 buffer: 0, 18 container: window, 19 onEnter: options.onEnter ? options.onEnter : [], 20 onLeave: options.onLeave ? options.onLeave : [], 21 onTick: options.onTick ? options.onTick : [] 22 } 23 24 var options = $.extend( {}, defaults, options ); 25 26 return this.each(function (i) { 27 28 var element = this; 29 var o = options; 30 var $container = $(o.container); 31 var mode = o.mode; 32 var buffer = o.buffer; 33 var enters = leaves = 0; 34 var inside = false; 35 36 /* add listener to container */ 37 $container.bind('scroll', function(e){ 38 var position = {top: $(this).scrollTop(), left: $(this).scrollLeft()}; 39 var xy = (mode == 'vertical') ? position.top + buffer : position.left + buffer; 40 var max = o.max; 41 var min = o.min; 42 43 /* fix max */ 44 if($.isFunction(o.max)){ 45 max = o.max(); 46 } 47 48 /* fix max */ 49 if($.isFunction(o.min)){ 50 min = o.min(); 51 } 52 53 if(max == 0){ 54 max = (mode == 'vertical') ? $container.height() : $container.outerWidth() + $(element).outerWidth(); 55 } 56 57 /* if we have reached the minimum bound but are below the max ... */ 58 if(xy >= min && xy <= max){ 59 /* trigger enter event */ 60 if(!inside){ 61 inside = true; 62 enters++; 63 64 /* fire enter event */ 65 $(element).trigger('scrollEnter', {position: position}) 66 if($.isFunction(o.onEnter)){ 67 o.onEnter(element, position); 68 } 69 70 } 71 72 /* triger tick event */ 73 $(element).trigger('scrollTick', {position: position, inside: inside, enters: enters, leaves: leaves}) 74 if($.isFunction(o.onTick)){ 75 o.onTick(element, position, inside, enters, leaves); 76 } 77 }else{ 78 79 if(inside){ 80 inside = false;
81 leaves++; 82 /* trigger leave event */ 83 $(element).trigger('scrollLeave', {position: position, leaves:leaves}) 84 85 if($.isFunction(o.onLeave)){ 86 o.onLeave(element, position); 87 } 88 } 89 } 90 }); 91 92 }); 93 } 94 95 }) 96 97 98})( jQuery, window );
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.