PageSourceSearch

https://16handles.com/wp-content/themes/16handles/js/jquery-scrollspy.js

js 16handles.com collected 2026-09-26 02:34:32 UTC 3,098 bytes, 98 lines download raw bytes

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.