|
|
// jQuery Scrollstop Plugin v1.2.0
|
|
|
// https://github.com/ssorallen/jquery-scrollstop
|
|
|
|
|
|
(function (factory) {
|
|
|
// UMD[2] wrapper for jQuery plugins to work in AMD or in CommonJS.
|
|
|
//
|
|
|
// [2] https://github.com/umdjs/umd
|
|
|
|
|
|
if (typeof define === 'function' && define.amd) {
|
|
|
// AMD. Register as an anonymous module.
|
|
|
define(['jquery'], factory);
|
|
|
} else if (typeof exports === 'object') {
|
|
|
// Node/CommonJS
|
|
|
module.exports = factory(require('jquery'));
|
|
|
} else {
|
|
|
// Browser globals
|
|
|
factory(jQuery);
|
|
|
}
|
|
|
}(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));
|
|
|
}
|
|
|
};
|
|
|
}));
|
|
|
|