2015-11-18 4 views
0

Используйте случайКлючевое событие Javascript - Debouce только в случае повторного ключевого события?

  1. У меня есть список лица или группы лиц (как в FB мессенджера) (левая панель)
  2. Когда я переключаюсь человека, я загрузить сообщение (API вызова).
  3. Если я быстро нажимаю стрелку вниз, то вместо вызова API для каждого из людей я хочу загрузить только человека, которого я приостанавливаю и жду.
  4. В настоящее время я занимаю 300 мс для достижения этого.

    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 и non-debounce в том же потоке

+0

Не могли бы вы просто хранить значение ключа события в объекте или что-то а затем, чтобы ваш код дебета сначала проверял значение этого объекта перед дебазацией? Например, это предыдущее значение ключа совпадает с текущим значением события, а затем debounces, но в противном случае оно не работает. – 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); 
     } 
    } 
} 

Edit: Забыли очистить буфер переменной

 Смежные вопросы

  • Нет связанных вопросов^_^