Skip to content

Instantly share code, notes, and snippets.

@gfranko
Last active August 29, 2015 14:01
Show Gist options
  • Save gfranko/363081aee5d41f8881a6 to your computer and use it in GitHub Desktop.
Save gfranko/363081aee5d41f8881a6 to your computer and use it in GitHub Desktop.
Debounce Implementation
function debounce(func, wait) {
// we need to save these in the closure
var timeout, args, context, timestamp;
return function () {
// save details of latest call
context = this;
args = [].slice.call(arguments, 0);
timestamp = new Date();
// this is where the magic happens
var later = function () {
// how long ago was the last call
var last = (new Date()) - timestamp;
// if the latest call was less that the wait period ago
// then we reset the timeout to wait for the difference
if (last < wait) {
timeout = setTimeout(later, wait - last);
// or if not we can null out the timer and run the latest
} else {
timeout = null;
func.apply(context, args);
}
};
// we only need to set the timer now if one isn't already running
if (!timeout) {
timeout = setTimeout(later, wait);
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment