搜尋

首頁  >  問答  >  主體

javascript - scroll結束事件

需求滾動顯示隱藏,需求是: 滾動時選單隱藏,滾動停止時選單顯示,但是不知道怎麼監聽scroll結束事件,求解惑

伊谢尔伦伊谢尔伦2770 天前1127

全部回覆(3)我來回復

  • 淡淡烟草味

    淡淡烟草味2017-06-14 10:56:32

    把結束 handler 放在 scroll 事件中不斷延時處理,scroll 事件停了之後就會觸發。

    var scrollTimer
    const timeout = 400
    function handler () {
      // ...
    }
    document.addEventListener('scroll', () => {
      clearTimeout(scrollTimer)
      scrollTimer = setTimeout(handler, timeout)
    })

    回覆
    0
  • 迷茫

    迷茫2017-06-14 10:56:32

    雷雷

    回覆
    0
  • 学习ing

    学习ing2017-06-14 10:56:32

    可以考慮使用touch來模擬scroll,然後使用touchend
    如果一定要使用scroll,那就在scroll的回調中做延時處理,以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) );
            }
        };
     
    })();

    回覆
    0
  • 取消回覆