!(function (factory) { 'function' == typeof define && define.amd ? define(['jquery'], factory) : 'object' == typeof exports ? (module.exports = factory(require('jquery'))) : factory(jQuery) })(function ($) { var dispatch = $.event.dispatch || $.event.handle, special = $.event.special, uid1 = 'D' + +new Date(), uid2 = 'D' + (+new Date() + 1) ;(special.scrollstart = { setup: function (data) { var timer, _data = $.extend({ latency: special.scrollstop.latency }, data), handler = function (evt) { var _self = this, _args = arguments timer ? clearTimeout(timer) : ((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 timer, _data = $.extend({ latency: special.scrollstop.latency }, data), handler = function (evt) { var _self = this, _args = arguments 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)) }, }) })