UNPKG

4.55 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 || (0, Utils_1.isSsr)() ? 1 : window.devicePixelRatio;
13 const motionOptions = this.container.actualOptions.motion;
14 if (motionOptions && (motionOptions.disable || motionOptions.reduce.value)) {
15 if ((0, Utils_1.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.attractDistance = particles.move.attract.distance * ratio;
47 this.linksDistance = particles.links.distance * ratio;
48 this.linksWidth = particles.links.width * ratio;
49 this.sizeAnimationSpeed = particles.size.animation.speed * ratio;
50 this.maxSpeed = particles.move.gravity.maxSpeed * ratio;
51 if (particles.orbit.radius !== undefined) {
52 this.orbitRadius = particles.orbit.radius * this.container.retina.pixelRatio;
53 }
54 const modes = options.interactivity.modes;
55 this.connectModeDistance = modes.connect.distance * ratio;
56 this.connectModeRadius = modes.connect.radius * ratio;
57 this.grabModeDistance = modes.grab.distance * ratio;
58 this.repulseModeDistance = modes.repulse.distance * ratio;
59 this.bounceModeDistance = modes.bounce.distance * ratio;
60 this.attractModeDistance = modes.attract.distance * ratio;
61 this.slowModeRadius = modes.slow.radius * ratio;
62 this.bubbleModeDistance = modes.bubble.distance * ratio;
63 if (modes.bubble.size) {
64 this.bubbleModeSize = modes.bubble.size * ratio;
65 }
66 }
67 initParticle(particle) {
68 const options = particle.options;
69 const ratio = this.pixelRatio;
70 const moveDistance = options.move.distance;
71 const props = particle.retina;
72 props.attractDistance = options.move.attract.distance * ratio;
73 props.linksDistance = options.links.distance * ratio;
74 props.linksWidth = options.links.width * ratio;
75 props.moveDrift = (0, Utils_1.getRangeValue)(options.move.drift) * ratio;
76 props.moveSpeed = (0, Utils_1.getRangeValue)(options.move.speed) * ratio;
77 props.sizeAnimationSpeed = options.size.animation.speed * ratio;
78 if (particle.spin) {
79 props.spinAcceleration = (0, Utils_1.getRangeValue)(options.move.spin.acceleration) * ratio;
80 }
81 const maxDistance = props.maxDistance;
82 maxDistance.horizontal = moveDistance.horizontal !== undefined ? moveDistance.horizontal * ratio : undefined;
83 maxDistance.vertical = moveDistance.vertical !== undefined ? moveDistance.vertical * ratio : undefined;
84 props.maxSpeed = options.move.gravity.maxSpeed * ratio;
85 }
86 handleMotionChange(mediaQuery) {
87 const options = this.container.actualOptions;
88 if (mediaQuery.matches) {
89 const motion = options.motion;
90 this.reduceFactor = motion.disable ? 0 : motion.reduce.value ? 1 / motion.reduce.factor : 1;
91 }
92 else {
93 this.reduceFactor = 1;
94 }
95 }
96}
97exports.Retina = Retina;