UNPKG

tsparticles

Version:

Easily create highly customizable particle, confetti and fireworks animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.

46 lines (45 loc) 1.77 kB
import { ExternalInteractorBase } from "../../../Core"; import { isInArray } from "../../../Utils"; /** * Particle connection manager * @category Interactions */ export class Connector extends ExternalInteractorBase { constructor(container) { super(container); } isEnabled() { const container = this.container, mouse = container.interactivity.mouse, events = container.actualOptions.interactivity.events; if (!(events.onHover.enable && mouse.position)) { return false; } return isInArray("connect" /* connect */, events.onHover.mode); } reset() { // do nothing } /** * Connecting particles on hover interactivity */ async interact() { const container = this.container, options = container.actualOptions; if (options.interactivity.events.onHover.enable && container.interactivity.status === "mousemove") { const mousePos = container.interactivity.mouse.position; if (!mousePos) { return; } const distance = Math.abs(container.retina.connectModeRadius), query = container.particles.quadTree.queryCircle(mousePos, distance); let i = 0; for (const p1 of query) { const pos1 = p1.getPosition(); for (const p2 of query.slice(i + 1)) { const pos2 = p2.getPosition(), distMax = Math.abs(container.retina.connectModeDistance), xDiff = Math.abs(pos1.x - pos2.x), yDiff = Math.abs(pos1.y - pos2.y); if (xDiff < distMax && yDiff < distMax) { container.canvas.drawConnectLine(p1, p2); } } ++i; } } } }