Skip to content

Instantly share code, notes, and snippets.

@blasten
Created November 21, 2018 18:33
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 blasten/12329bb21ac5faa190522d52d21271b5 to your computer and use it in GitHub Desktop.
Save blasten/12329bb21ac5faa190522d52d21271b5 to your computer and use it in GitHub Desktop.
function throttle(task, ms, context) {
let started = false;
let lastCall = -Infinity;
let taskScheduled = false;
let lastArguments = [];
return function() {
if (!started) {
started = true;
lastCall = Date.now();
task.apply(context || null, arguments);
} else {
const remainingTime = Date.now() - lastCall;
if (remainingTime >= ms) {
lastCall = Date.now();
task.apply(context || null, arguments);
} else {
if (!taskScheduled) {
setTimeout(() => {
taskScheduled = false;
task.apply(context || null, lastArguments);
}, remainingTime);
taskScheduled = true;
}
lastArguments = arguments;
}
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment