Skip to content

Instantly share code, notes, and snippets.

@beetleman
Created August 18, 2016 08:25
Show Gist options
  • Save beetleman/7d8739082c547a7cd6a75aa670871ec0 to your computer and use it in GitHub Desktop.
Save beetleman/7d8739082c547a7cd6a75aa670871ec0 to your computer and use it in GitHub Desktop.
Handling events in requestAnimationFrame (es2016)
export const debouncedEvent = ({element, event, handler, useCapture=false}) => {
let eventObject = null;
let ticking = false;
const update = _ => {
ticking = false;
handler(eventObject);
};
const requestTick = _ => {
if(!ticking) {
requestAnimationFrame(update);
}
ticking = true;
};
const onEvent = e => {
eventObject = e;
requestTick();
};
element.addEventListener(event, onEvent, useCapture);
return () => {
element.removeEventListener(event, onEvent, useCapture);
};
};
@beetleman
Copy link
Author

  • Usage:
    • add event:
      let removeListner = debouncedEvent({element: window, event: 'scroll', handler: funnyEventFunction});
    • remove event:
      removeListner();

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