37 lines
780 B
JavaScript
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();
|