UNPKG

@tsparticles/plugin-motion

Version:

tsParticles motion sickness plugin

60 lines (59 loc) 2.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MotionInstance = void 0; const engine_1 = require("@tsparticles/engine"); const defaultFactor = 1, defaultReduce = 1, disableReduce = 0, identity = 1; class MotionInstance { constructor(container, engine) { this._handleMotionChange = mediaQuery => { const container = this._container, motion = container.actualOptions.motion; if (!motion) { return; } if (mediaQuery.matches) { if (motion.disable) { container.retina.reduceFactor = disableReduce; } else { container.retina.reduceFactor = motion.reduce.value ? identity / motion.reduce.factor : defaultFactor; } } else { container.retina.reduceFactor = defaultReduce; } }; this._container = container; this._engine = engine; } async init() { const container = this._container, options = container.actualOptions.motion; if (!(options && (options.disable || options.reduce.value))) { container.retina.reduceFactor = 1; return; } const mediaQuery = (0, engine_1.safeMatchMedia)("(prefers-reduced-motion: reduce)"); if (!mediaQuery) { container.retina.reduceFactor = defaultFactor; return; } this._handleMotionChange(mediaQuery); const handleChange = () => { void (async () => { this._handleMotionChange(mediaQuery); try { await container.refresh(); } catch { } })(); }; if (mediaQuery.addEventListener !== undefined) { mediaQuery.addEventListener("change", handleChange); } else if (mediaQuery.addListener !== undefined) { mediaQuery.addListener(handleChange); } await Promise.resolve(); } } exports.MotionInstance = MotionInstance;