scroll()方法的扩展
javascript里有一个事件是滚动事件,只要拖动滚动条,就会触发事件。 用jquery的话,这个事件scroll 可以查看jquery api : [http://api.jquery.com/scroll] 但scroll 事件有一个缺陷,就是只能判断滚动条滚动,而不能监控滚动条停止滚动时的事件。 现用jquery扩展一下scroll 事件,新增了监听滚动事件的开始和滚动事件的结束.
/*这个js文件对scroll()方法进行扩展,在JQ中scroll()只可以监听滚动的时候的一个事件.这个js文件可以监听scrollStart和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) ); } }; })();复制代码
可以将上面代码保存到一个文件,这相当于一个插件。 调用方法如下:
(function(){ jQuery(window).bind('scrollstart', function(){ console.log("start"); }); jQuery(window).bind('scrollstop', function(e){ console.log("end"); }); })(); 复制代码
这样就完成了一个扩展的scroll()方法,可以监听滚动开始和滚动结束了.还是很有实际价值的.