@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
51 lines (50 loc) • 1.66 kB
JavaScript
;
import ScrollTrigger from "gsap/ScrollTrigger";
import { gsap } from "../../core/thirdParty/gsap/gsap";
gsap.registerPlugin(ScrollTrigger);
import { NamedFunction4 } from "./_Base";
import { ScrollEvent, SCROLL_EVENTS } from "../../core/scroll/Common";
function _createScrollListener(createOptions, listeners, progressRef) {
const { useViewport, scroller, displayMarkers, nodePath } = createOptions;
const _getScroller = () => {
if (useViewport) {
console.log("useViewport is true, not finding scroller");
return;
}
const scrollerElement = document.querySelector(scroller);
if (!scrollerElement) {
console.log(`no scrollerElement element found with selector '${scroller}'`);
return;
}
return scrollerElement;
};
const element = document.querySelector(createOptions.element);
const options = {
trigger: element,
scroller: _getScroller(),
markers: displayMarkers,
id: nodePath
};
for (let eventName of SCROLL_EVENTS) {
const listener = listeners[eventName];
options[eventName] = listener;
}
options.onUpdate = (progress) => {
progressRef.value = progress.progress;
const listener = listeners[ScrollEvent.onUpdate];
listener();
};
const scrollTrigger = ScrollTrigger.create(options);
return scrollTrigger;
}
export class createScrollListener extends NamedFunction4 {
static type() {
return "createScrollListener";
}
func(createOptions, listeners, evaluator, progressRef) {
const scrollTrigger = _createScrollListener(createOptions, listeners, progressRef);
evaluator.onDispose(() => {
scrollTrigger.kill();
});
}
}