| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*!
- * jQuery Scrollspy Plugin
- * Author: @sxalexander
- * Licensed under the MIT license
- */
- ;(function ( $, window, document, undefined ) {
- $.fn.extend({
- scrollspy: function ( options ) {
-
- var defaults = {
- min: 0,
- max: 0,
- mode: 'vertical',
- buffer: 0,
- container: window,
- onEnter: options.onEnter ? options.onEnter : [],
- onLeave: options.onLeave ? options.onLeave : [],
- onTick: options.onTick ? options.onTick : []
- }
-
- var options = $.extend( {}, defaults, options );
- return this.each(function (i) {
- var element = this;
- var o = options;
- var $container = $(o.container);
- var mode = o.mode;
- var buffer = o.buffer;
- var enters = leaves = 0;
- var inside = false;
-
- /* add listener to container */
- $container.bind('scroll', function(e){
- var position = {top: $(this).scrollTop(), left: $(this).scrollLeft()};
- var xy = (mode == 'vertical') ? position.top + buffer : position.left + buffer;
- var max = o.max;
- var min = o.min;
-
- /* fix max */
- if($.isFunction(o.max)){
- max = o.max();
- }
- /* fix max */
- if($.isFunction(o.min)){
- min = o.min();
- }
- if(max == 0){
- max = (mode == 'vertical') ? $container.height() : $container.outerWidth() + $(element).outerWidth();
- }
-
- /* if we have reached the minimum bound but are below the max ... */
- if(xy >= o.min && xy <= max){
- /* trigger enter event */
- if(!inside){
- inside = true;
- enters++;
-
- /* fire enter event */
- $(element).trigger('scrollEnter', {position: position})
- if($.isFunction(o.onEnter)){
- o.onEnter(element, position);
- }
-
- }
-
- /* triger tick event */
- $(element).trigger('scrollTick', {position: position, inside: inside, enters: enters, leaves: leaves})
- if($.isFunction(o.onTick)){
- o.onTick(element, position, inside, enters, leaves);
- }
- }else{
-
- if(inside){
- inside = false;
- leaves++;
- /* trigger leave event */
- $(element).trigger('scrollLeave', {position: position, leaves:leaves})
- if($.isFunction(o.onLeave)){
- o.onLeave(element, position);
- }
- }
- }
- });
- });
- }
- })
-
- })( jQuery, window );
|