2015-11-18 114 views
0

用例Javascript關鍵事件 - 只有在重複關鍵事件時纔會發生?

  1. 我有(如在FB信使)的個人或團體的列表(左側窗格)
  2. 。當切換人,我加載消息(API調用)。
  3. 如果我快速按下箭頭,那麼不是爲每個人進行API調用,而只想加載我暫停和等待的人。
  4. 目前我正在剔除300ms來實現這一目標。

    handleSwitchKeyEvent: function() { 
        if (this.pendingLoad) { 
         // Still pending continue to debounce 
         clearTimeout(this.pendingLoad); 
         fn = this.loadContent; 
        } else { 
         // No longer pending - So load data immediately 
         this.loadContent(); 
        } 
    
        // Delay the load 
        this.pendingLoad = setTimeout(function() { 
         clearTimeout(this.pendingLoad); 
         this.pendingLoad = 0; 
         fn && fn.call(this); 
        }, 300); 
    } 
    

問題

  1. 當我在消息1 - M1細節加載
  2. 當我按下鍵快 - M2將加載,然後去反彈會發生下一條消息)

我想避免這個M2負載。我不確定是否可以在同一個流程中混合使用debouce和非debounce

+0

你能僅僅存儲在一個物體或事物的關鍵事件值然後讓debounce代碼首先在debouncing之前檢查該對象的值?就像,它的前一個關鍵值與當前事件值相同,然後消除,否則它不會。 – Pytth

回答

0

而不是「debounce」,您可能正在尋找一些能夠在調用函數之前啓動超時並等待一段時間在通過最後一個參數這裏是一個quick'n'dirty緩衝功能(未經測試):

function buffer(fn, duration) { 
    // Store a timeout id and last args called with 
    var buffer; 
    var lastArgs; 
    return function() { 
     // The last args will be used 
     lastArgs = arguments; 
     // If buffer hasn't started, kick it off 
     if (!buffer) { 
      buffer = setTimeout(function() { 
       // After duration, call the function with args 
       // Reset buffer 
       fn.apply(null, lastArgs); 
       buffer = null; 
      }, duration); 
     } 
    } 
} 

編輯:忘了清除緩衝區變量