Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@MikeFielden
Created June 19, 2015 15:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MikeFielden/8137b4e58aba384bd8dc to your computer and use it in GitHub Desktop.
Save MikeFielden/8137b4e58aba384bd8dc to your computer and use it in GitHub Desktop.
debounce
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
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);
};
};
// Usage
var myEfficientFn = debounce(function() {
// All the taxing stuff you do
}, 250);
window.addEventListener('resize', myEfficientFn);
@MikeFielden
Copy link
Author

Useful for things like resize, scroll, keyup, keydown, keypress, keywhatever events

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment