| /*! |
| * jQuery Scrollstop Plugin v1.1.0 |
| * https://github.com/ssorallen/jquery-scrollstop |
| */ |
| (function($) { |
| // $.event.dispatch was undocumented and was deprecated in jQuery 1.7[1]. It |
| // was replaced by $.event.handle in jQuery 1.9. |
| // |
| // Use the first of the available functions to support jQuery <1.8. |
| // |
| // [1] https://github.com/jquery/jquery-migrate/blob/master/src/event.js#L25 |
| var dispatch = $.event.dispatch || $.event.handle; |
| var special = $.event.special, |
| uid1 = 'D' + (+new Date()), |
| uid2 = 'D' + (+new Date() + 1); |
| special.scrollstart = { |
| setup: function(data) { |
| var _data = $.extend({ |
| latency: special.scrollstop.latency |
| }, data); |
| var timer, |
| handler = function(evt) { |
| var _self = this, |
| _args = arguments; |
| if (timer) { |
| clearTimeout(timer); |
| } else { |
| evt.type = 'scrollstart'; |
| dispatch.apply(_self, _args); |
| } |
| timer = setTimeout(function() { |
| timer = null; |
| }, _data.latency); |
| }; |
| $(this).bind('scroll', handler).data(uid1, handler); |
| }, |
| teardown: function() { |
| $(this).unbind('scroll', $(this).data(uid1)); |
| } |
| }; |
| special.scrollstop = { |
| latency: 250, |
| setup: function(data) { |
| var _data = $.extend({ |
| latency: special.scrollstop.latency |
| }, data); |
| var timer, |
| handler = function(evt) { |
| var _self = this, |
| _args = arguments; |
| if (timer) { |
| clearTimeout(timer); |
| } |
| timer = setTimeout(function() { |
| timer = null; |
| evt.type = 'scrollstop'; |
| dispatch.apply(_self, _args); |
| }, _data.latency); |
| }; |
| $(this).bind('scroll', handler).data(uid2, handler); |
| }, |
| teardown: function() { |
| $(this).unbind('scroll', $(this).data(uid2)); |
| } |
| }; |
| })(jQuery); |