@tsparticles/interaction-external-push
Version:
tsParticles push external interaction
42 lines (41 loc) • 1.92 kB
JavaScript
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() {
}
}