const createScrollManager = function() { let callbacks = []; let scrollPosition = -1; let animatedKilled = false; const animate = () => { requestAnimationFrame(onScroll); } function onScroll(){ if(animatedKilled) return; if (scrollPosition !== window.pageYOffset) { window.removeEventListener('scroll', animate); scrollPosition = window.pageYOffset; callbacks.forEach(cb => cb(scrollPosition)); animate(); } else { window.addEventListener('scroll', animate); } } animate(); return { add: function(cb) { callbacks = [...callbacks, cb]; }, remove: function(cb) { callbacks = callbacks.filter(value => value != cb); }, destroy: function() { animatedKilled = true; window.removeEventListener('scroll', animate); } } } export default createScrollManager;