jquery.scrollstop.js
91 lines
| 2.4 KiB
| application/javascript
|
JavascriptLexer
r4441 | // 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)); | ||||
} | ||||
}; | ||||
})); | ||||