UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

51 lines (50 loc) 1.66 kB
"use strict"; 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(); }); } }