UNPKG

3.77 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.Retina = void 0;
4const Utils_1 = require("../Utils");
5class Retina {
6 constructor(container) {
7 this.container = container;
8 }
9 init() {
10 const container = this.container;
11 const options = container.actualOptions;
12 this.pixelRatio = !options.detectRetina || Utils_1.Utils.isSsr() ? 1 : window.devicePixelRatio;
13 const motionOptions = this.container.actualOptions.motion;
14 if (motionOptions && (motionOptions.disable || motionOptions.reduce.value)) {
15 if (Utils_1.Utils.isSsr() || typeof matchMedia === "undefined" || !matchMedia) {
16 this.reduceFactor = 1;
17 }
18 else {
19 const mediaQuery = matchMedia("(prefers-reduced-motion: reduce)");
20 if (mediaQuery) {
21 this.handleMotionChange(mediaQuery);
22 const handleChange = () => {
23 this.handleMotionChange(mediaQuery);
24 container.refresh().catch(() => {
25 });
26 };
27 if (mediaQuery.addEventListener !== undefined) {
28 mediaQuery.addEventListener("change", handleChange);
29 }
30 else if (mediaQuery.addListener !== undefined) {
31 mediaQuery.addListener(handleChange);
32 }
33 }
34 }
35 }
36 else {
37 this.reduceFactor = 1;
38 }
39 const ratio = this.pixelRatio;
40 if (container.canvas.element) {
41 const element = container.canvas.element;
42 container.canvas.size.width = element.offsetWidth * ratio;
43 container.canvas.size.height = element.offsetHeight * ratio;
44 }
45 const particles = options.particles;
46 this.linksDistance = particles.links.distance * ratio;
47 this.linksWidth = particles.links.width * ratio;
48 this.sizeAnimationSpeed = particles.size.animation.speed * ratio;
49 const modes = options.interactivity.modes;
50 this.connectModeDistance = modes.connect.distance * ratio;
51 this.connectModeRadius = modes.connect.radius * ratio;
52 this.grabModeDistance = modes.grab.distance * ratio;
53 this.repulseModeDistance = modes.repulse.distance * ratio;
54 this.bounceModeDistance = modes.bounce.distance * ratio;
55 this.attractModeDistance = modes.attract.distance * ratio;
56 this.slowModeRadius = modes.slow.radius * ratio;
57 this.bubbleModeDistance = modes.bubble.distance * ratio;
58 if (modes.bubble.size) {
59 this.bubbleModeSize = modes.bubble.size * ratio;
60 }
61 }
62 initParticle(particle) {
63 const particlesOptions = particle.options;
64 const ratio = this.pixelRatio;
65 particle.linksDistance = particlesOptions.links.distance * ratio;
66 particle.linksWidth = particlesOptions.links.width * ratio;
67 particle.moveDrift = Utils_1.NumberUtils.getRangeValue(particlesOptions.move.drift) * ratio;
68 particle.moveSpeed = Utils_1.NumberUtils.getRangeValue(particlesOptions.move.speed) * ratio;
69 particle.sizeAnimationSpeed = particlesOptions.size.animation.speed * ratio;
70 particle.maxDistance = particlesOptions.move.distance * ratio;
71 }
72 handleMotionChange(mediaQuery) {
73 const options = this.container.actualOptions;
74 if (mediaQuery.matches) {
75 const motion = options.motion;
76 this.reduceFactor = motion.disable ? 0 : motion.reduce.value ? 1 / motion.reduce.factor : 1;
77 }
78 else {
79 this.reduceFactor = 1;
80 }
81 }
82}
83exports.Retina = Retina;