# NOTE: This is the latest version of ScrollSpy, which includes a ton of bug fixes and efficiency improvements. It's recommended that you use this version for now instead of the official (which hasn't been updated in a while). # jQuery-ScrollSpy An adaptation of the Mootools Scrollspy (http://davidwalsh.name/mootools-scrollspy) plugin for jQuery (c) 2011 Samuel Alexander (https://github.com/sxalexander/jquery-scrollspy) (c) 2015 SoftwareSpot Released under The MIT License. ## Description: ScrollSpy is a simple jQuery plugin for firing events based on where the user has scrolled to in a page. ## Homepage: https://github.com/softwarespot/jquery-scrollspy ## Source: Hosted at GitHub; browse at: https://github.com/softwarespot/jquery-scrollspy/tree/master Or clone from: git://github.com/softwarespot/jquery-scrollspy.git ## Usage: 1. Insert the necessary elements in to your document's `<head>` section, e.g.: ```html <script src="jquery.min.js"></script> <script src="jquery.scrollspy.min.js"></script> ``` 2. Initialise ScrollSpy once the DOM has been loaded: ```javascript <script> $(function() { var $nav = $('#nav'); $('#sticky-navigation').scrollspy({ min: $nav.offset().top, onEnter: function(element, position) { $nav.addClass('fixed'); }, onLeave: function(element, position) { $nav.removeClass('fixed'); } }); }); </script> ``` Check out the /examples for more info ! ## Documentation: ScrollSpy function signature: ```javascript $('container').scrollspy(options, action) ``` Default options for ScrollSpy: ```javascript // default options for ScrollSpy var defaults = { // the offset to be applied to the left and top positions of the container buffer: 0, // the element to apply the 'scrolling' event to (default window) container: window, // the maximum value of the X or Y coordinate, depending on mode the selected max: 0, // the maximum value of the X or Y coordinate, depending on mode the selected min: 0, // whether to listen to the X (horizontal) or Y (vertical) scrolling mode: 'vertical', // namespace to append to the 'scroll' event namespace: 'scrollspy', // call the following callback function every time the user enters the min / max zone onEnter: null, // call the following callback function every time the user leaves the min / max zone onLeave: null, // call the following callback function every time the user leaves the top zone onLeaveTop: null, // call the following callback function every time the user leaves the bottom zone onLeaveBottom: null, // call the following callback function on each scroll event within the min and max parameters onTick: null, // call the following callback function on each scroll event when the element is inside the viewable view port onView: null }; ``` Events are triggered by ScrollSpy are: scrollTick: Fires on each scroll event within the min and max parameters: position: an object with the current X and Y position. inside: a Boolean value for whether or not the user is within the min and max parameters enters: the number of times the min / max has been entered. leaves: the number of times the min / max has been left. scrollEnter: Fires every time the user enters the min / max zone: position: an object with the current X and Y position. enters: the number of times the min / max has been entered. scrollLeave: Fires every time the user leaves the min / max zone: position: an object with the current X and Y position. leaves: the number of times the min / max has been left. scrollLeaveTop: Fires every time the user leaves the top zone: position: an object with the current X and Y position. leaves: the number of times the min / max has been left. scrollLeaveBottom: Fires every time the user leaves the bottom zone: position: an object with the current X and Y position. leaves: the number of times the min / max has been left. scrollView: Fires every time the element is inside the viewable view port: position: an object with the current X and Y position. leaves: the number of times the min / max has been left. ### Tidy up To destroy ScrollSpy for a particular container, simple pass 'destroy' as the action parameter. The only options that will be honoured are `container` and `namespace`. ## A note about forking: By forking this project you hereby grant permission for any commits to your fork to be merged back into this repository and, with attribution, be released under the terms of the MIT License. ## Contribute To contribute to the project, you will first need to install [node](https://nodejs.org) globally on your system. Once installation has completed, change the working directory to the plugin's location and run the following command: ```shell npm install ``` After installation of the local modules, you're ready to start contributing to the project. Before you submit your PR, please don't forget to call `gulp`, which will run against [JSHint](http://jshint.com) for any errors, but will also minify the plugin. ##### Watch Call the following command to start 'watching' for any changes to the main JavaScript file(s). This will automatically invoke JSHint and Uglify. ```shell gulp watch ``` ##### JSHint Call the following command to invoke JSHint and check that the changes meet the requirements set in .jshintrc. ```shell gulp jshint ``` ##### Uglify Call the following command to invoke Uglify, which will minify the main JavaScript file(s) and output to a .min.js file respectively. ```shell gulp uglify ``` ##### Build Call the following command to invoke both JSHint and Uglify. ```shell gulp ```