Rumah  >  Soal Jawab  >  teks badan

javascript - tatal acara tamat

Ia diperlukan untuk memaparkan dan menyembunyikan tatal Keperluannya ialah: menu disembunyikan semasa menatal, dan menu dipaparkan apabila menatal berhenti Walau bagaimanapun, saya tidak tahu bagaimana untuk memantau acara penamatan tatal

伊谢尔伦伊谢尔伦2684 hari yang lalu1067

membalas semua(3)saya akan balas

  • 淡淡烟草味

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

    Letakkan pengendali penamat dalam acara tatal untuk pemprosesan kelewatan berterusan Ia akan dicetuskan selepas acara tatal berhenti.

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

    balas
    0
  • 迷茫

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

        // 防抖动函数  
        function debounce(func, wait, immediate) {  
            var timeout;  
            return function() {  
                var context = this, args = arguments;  
                var later = function() {  
                    timeout = null;  
                    if (!immediate) func.apply(context, args);  
                };  
                var callNow = immediate & !timeout;  
                clearTimeout(timeout);  
                timeout = setTimeout(later, wait);  
                if (callNow) func.apply(context, args);  
            };  
        };  
           
        var myEfficientFn = debounce(function() {  
            // 滚动中的真正的操作  
        }, 250);  
           
        // 绑定监听  
        window.addEventListener('scroll', myEfficientFn);  

    balas
    0
  • 学习ing

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

    Anda boleh mempertimbangkan untuk menggunakan touch来模拟scroll,然后使用touchend
    如果一定要使用scroll,那就在scroll的回调中做延时处理,以jQuery sebagai contoh.

    (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) );
            }
        };
     
    })();

    balas
    0
  • Batalbalas