@tsparticles/plugin-motion
Version:
tsParticles motion sickness plugin
60 lines (59 loc) • 2.14 kB
JavaScript
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;
;