UNPKG

@tsparticles/interaction-external-push

Version:

tsParticles push external interaction

42 lines (41 loc) 1.92 kB
import { ExternalInteractorBase, } from "@tsparticles/plugin-interactivity"; import { deepExtend, getRangeValue, isInArray, itemFromArray, itemFromSingleOrMultiple, loadOptionProperty, } from "@tsparticles/engine"; import { Push } from "./Options/Classes/Push.js"; const pushMode = "push", minQuantity = 0; export class Pusher extends ExternalInteractorBase { handleClickMode; maxDistance = 0; constructor(container) { super(container); this.handleClickMode = (mode, interactivityData) => { if (mode !== pushMode) { return; } const container = this.container, options = container.actualOptions, pushOptions = options.interactivity?.modes.push; if (!pushOptions) { return; } const quantity = getRangeValue(pushOptions.quantity); if (quantity <= minQuantity) { return; } const group = itemFromArray([undefined, ...pushOptions.groups]), groupOptions = group !== undefined ? container.actualOptions.particles.groups[group] : undefined, particlesOptions = itemFromSingleOrMultiple(pushOptions.particles), overrideOptions = deepExtend(groupOptions, particlesOptions); container.particles.push(quantity, interactivityData.mouse.position, overrideOptions, group); }; } clear() { } init() { } interact() { } isEnabled(interactivityData, particle) { const container = this.container, options = container.actualOptions, mouse = interactivityData.mouse, events = (particle?.interactivity ?? options.interactivity)?.events; return !!events && mouse.clicking && mouse.inside && !!mouse.position && isInArray(pushMode, events.onClick.mode); } loadModeOptions(options, ...sources) { loadOptionProperty(options, "push", Push, ...sources); } reset() { } }