UNPKG

tsparticles

Version:

Easily create highly customizable particle 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.

50 lines (49 loc) 1.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Connector = void 0; const Utils_1 = require("../../Utils"); const Modes_1 = require("../../Enums/Modes"); class Connector { constructor(container) { this.container = container; } isEnabled() { const container = this.container; const mouse = container.interactivity.mouse; const events = container.actualOptions.interactivity.events; if (!(events.onHover.enable && mouse.position)) { return false; } const hoverMode = events.onHover.mode; return Utils_1.Utils.isInArray(Modes_1.HoverMode.connect, hoverMode); } reset() { } interact() { const container = this.container; const 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); const 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(); const distMax = Math.abs(container.retina.connectModeDistance); const xDiff = Math.abs(pos1.x - pos2.x); const yDiff = Math.abs(pos1.y - pos2.y); if (xDiff < distMax && yDiff < distMax) { container.canvas.drawConnectLine(p1, p2); } } ++i; } } } } exports.Connector = Connector;