UNPKG

gpu-curtains

Version:

gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.

67 lines (65 loc) 2.37 kB
var __typeError = (msg) => { throw TypeError(msg); }; var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj)); var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value); var __setScroll; class ScrollManager { /** * ScrollManager constructor * @param parameters - {@link ScrollManagerParams | parameters} used to create this {@link ScrollManager} */ constructor({ scroll = { x: 0, y: 0 }, delta = { x: 0, y: 0 }, shouldWatch = true, onScroll = (delta2 = { x: 0, y: 0 }) => { } } = {}) { /** @ignore */ __privateAdd(this, __setScroll); this.scroll = scroll; this.delta = delta; this.shouldWatch = shouldWatch; this.onScroll = onScroll; __privateSet(this, __setScroll, this.setScroll.bind(this)); if (this.shouldWatch) { window.addEventListener("scroll", __privateGet(this, __setScroll), { passive: true }); } } /** * Called by the scroll event listener */ setScroll() { this.updateScrollValues({ x: window.pageXOffset, y: window.pageYOffset }); } /** * Updates the scroll manager X and Y scroll values as well as last X and Y deltas * Internally called by the scroll event listener * Could be called externally as well if the user wants to handle the scroll by himself * @param parameters - {@link core/DOM/DOMElement.DOMPosition | scroll values} */ updateScrollValues({ x, y }) { const lastScroll = this.scroll; this.scroll = { x, y }; this.delta = { x: lastScroll.x - this.scroll.x, y: lastScroll.y - this.scroll.y }; if (this.onScroll) { this.onScroll(this.delta); } } /** * Destroy our scroll manager (just remove our event listner if it had been added previously) */ destroy() { if (this.shouldWatch) { window.removeEventListener("scroll", __privateGet(this, __setScroll), { passive: true }); } } } __setScroll = new WeakMap(); export { ScrollManager };