需求滾動顯示隱藏,需求是: 滾動時選單隱藏,滾動停止時選單顯示,但是不知道怎麼監聽scroll結束事件,求解惑
小伙看你根骨奇佳,潜力无限,来学PHP伐。
把結束 handler 放在 scroll 事件中不斷延時處理,scroll 事件停了之後就會觸發。
var scrollTimer const timeout = 400 function handler () { // ... } document.addEventListener('scroll', () => { clearTimeout(scrollTimer) scrollTimer = setTimeout(handler, timeout) })
雷雷
可以考慮使用touch來模擬scroll,然後使用touchend。 如果一定要使用scroll,那就在scroll的回調中做延時處理,以jQuery為例。
touch
scroll
touchend
jQuery
(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) ); } }; })();
把結束 handler 放在 scroll 事件中不斷延時處理,scroll 事件停了之後就會觸發。
雷雷
可以考慮使用
touch
來模擬scroll
,然後使用touchend
。如果一定要使用
scroll
,那就在scroll
的回調中做延時處理,以jQuery
為例。