Files
michaelschiemer/resources/js/modules/scrollfx/ScrollEngine.js

37 lines
780 B
JavaScript

// src/resources/js/scrollfx/ScrollEngine.js
class ScrollEngine {
constructor() {
this.triggers = new Set();
this.viewportHeight = window.innerHeight;
this._loop = this._loop.bind(this);
window.addEventListener('resize', () => {
this.viewportHeight = window.innerHeight;
});
requestAnimationFrame(this._loop);
}
register(trigger) {
this.triggers.add(trigger);
}
unregister(trigger) {
this.triggers.delete(trigger);
}
clear() {
this.triggers.clear();
}
_loop() {
this.triggers.forEach(trigger => {
trigger.update(this.viewportHeight);
});
requestAnimationFrame(this._loop);
}
}
export default new ScrollEngine();