Eventos jQuery para iniciar / parar a rolagem

O plugin abaixo pode ser colocado em seu próprio arquivo e incluído em sua página, então usado com JQ.

/**
* Adds support for the special browser events 'scrollstart' and 'scrollstop'.

*/


(function(){

var special = jQuery.event.special,
uid1
= 'D' + (+new Date()),
uid2
= 'D' + (+new Date() + 1);

special
.scrollstart = {
setup
: function() {

var timer,
handler
= function(evt) {

var _self = this,
_args
= arguments;

if (timer) {
clearTimeout
(timer);
} else {
evt
.type = 'scrollstart';
jQuery
.event.handle.apply(_self, _args);
}

timer
= setTimeout( function(){
timer
= null;
}, special.scrollstop.latency);

};

jQuery
(this).bind('scroll', handler).data(uid1, handler);

},
teardown
: function(){
jQuery
(this).unbind( 'scroll', jQuery(this).data(uid1) );
}
};

special
.scrollstop = {
latency
: 300,
setup
: function() {

var timer,
handler
= function(evt) {

var _self = this,
_args
= arguments;

if (timer) {
clearTimeout
(timer);
}

timer
= setTimeout( function(){

timer
= null;
evt
.type = 'scrollstop';
jQuery
.event.handle.apply(_self, _args);

}, special.scrollstop.latency);

};

jQuery
(this).bind('scroll', handler).data(uid2, handler);

},
teardown
: function() {
jQuery
(this).unbind( 'scroll', jQuery(this).data(uid2) );
}
};

})();