UNPKG

2.6 kBJavaScriptView Raw
1import { Constants, Utils, ColorUtils, NumberUtils } from "../../Utils";
2import { HoverMode } from "../../Enums/Modes";
3export class Grabber {
4 constructor(container) {
5 this.container = container;
6 }
7 isEnabled() {
8 const container = this.container;
9 const mouse = container.interactivity.mouse;
10 const events = container.actualOptions.interactivity.events;
11 if (!(events.onHover.enable && mouse.position)) {
12 return false;
13 }
14 const hoverMode = events.onHover.mode;
15 return Utils.isInArray(HoverMode.grab, hoverMode);
16 }
17 reset() {
18 }
19 interact() {
20 var _a;
21 const container = this.container;
22 const options = container.actualOptions;
23 const interactivity = options.interactivity;
24 if (interactivity.events.onHover.enable && container.interactivity.status === Constants.mouseMoveEvent) {
25 const mousePos = container.interactivity.mouse.position;
26 if (mousePos === undefined) {
27 return;
28 }
29 const distance = container.retina.grabModeDistance;
30 const query = container.particles.quadTree.queryCircle(mousePos, distance);
31 for (const particle of query) {
32 const pos = particle.getPosition();
33 const pointDistance = NumberUtils.getDistance(pos, mousePos);
34 if (pointDistance <= distance) {
35 const grabLineOptions = interactivity.modes.grab.links;
36 const lineOpacity = grabLineOptions.opacity;
37 const opacityLine = lineOpacity - (pointDistance * lineOpacity) / distance;
38 if (opacityLine > 0) {
39 const optColor = (_a = grabLineOptions.color) !== null && _a !== void 0 ? _a : particle.options.links.color;
40 if (!container.particles.grabLineColor) {
41 const linksOptions = container.actualOptions.interactivity.modes.grab.links;
42 container.particles.grabLineColor = ColorUtils.getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);
43 }
44 const colorLine = ColorUtils.getLinkColor(particle, undefined, container.particles.grabLineColor);
45 if (colorLine === undefined) {
46 return;
47 }
48 container.canvas.drawGrabLine(particle, colorLine, opacityLine, mousePos);
49 }
50 }
51 }
52 }
53 }
54}