Skip to content

Commit b836a59

Browse files
committed
fix: improved cannon and interactivity events
1 parent 8cfcc50 commit b836a59

5 files changed

Lines changed: 18 additions & 20 deletions

File tree

engine/src/Utils/LogUtils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ interface ILogger {
1414
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
1515
log(this: void, message?: unknown, ...optionalParams: unknown[]): void;
1616

17+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
18+
trace(this: void, ...data: unknown[]): void;
19+
1720
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
1821
verbose(this: void, message?: unknown, ...optionalParams: unknown[]): void;
1922

@@ -29,6 +32,7 @@ const _logger: ILogger = {
2932
},
3033
info: console.info,
3134
log: console.log,
35+
trace: console.trace,
3236
verbose: console.log,
3337
warning: console.warn,
3438
};

interactions/external/cannon/src/Cannoner.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
getDistance,
1818
getRandomInRange,
1919
identity,
20+
none,
2021
} from "@tsparticles/engine";
2122
import { Cannon } from "./Options/Classes/Cannon.js";
2223

@@ -206,7 +207,7 @@ export class Cannoner extends ExternalInteractorBase<CannonContainer> {
206207
pxRatio = this.container.retina.pixelRatio,
207208
dragDist = getDistance(origin, current),
208209
// Clamp to maxDragDistance so visual feedback matches actual force
209-
clampedDist = Math.min(dragDist, opts.maxDragDistance * pxRatio),
210+
clampedDist = opts.maxDragDistance > none ? Math.min(dragDist, opts.maxDragDistance * pxRatio) : pxRatio,
210211
clampRatio = dragDist > minDistance ? clampedDist / dragDist : minDistance,
211212
clampedX = origin.x + (current.x - origin.x) * clampRatio,
212213
clampedY = origin.y + (current.y - origin.y) * clampRatio;
@@ -243,7 +244,8 @@ export class Cannoner extends ExternalInteractorBase<CannonContainer> {
243244

244245
const { origin, current } = this._gesture,
245246
pxRatio = this.container.retina.pixelRatio,
246-
dragLength = Math.min(getDistance(origin, current), opts.maxDragDistance * pxRatio);
247+
dist = getDistance(origin, current),
248+
dragLength = opts.maxDragDistance > none ? Math.min(dist, opts.maxDragDistance * pxRatio) : dist;
247249

248250
if (dragLength < minTapsLength) {
249251
// Ignore accidental taps

interactions/external/particle/src/InteractivityParticleMaker.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ export class InteractivityParticleMaker extends ExternalInteractorBase<Interacti
8484
}
8585

8686
if (interactivityParticleOptions.replaceCursor) {
87-
const element = interactivityData.element as HTMLElement | Window | undefined;
87+
const element = interactivityData.element as HTMLElement | Window | Document | undefined;
8888

8989
if (element) {
90-
if (element instanceof Window) {
90+
if (element instanceof Window || element instanceof Document) {
9191
safeDocument().body.style.cursor = "";
9292
} else {
9393
element.style.cursor = "";
@@ -119,10 +119,10 @@ export class InteractivityParticleMaker extends ExternalInteractorBase<Interacti
119119
this._particle = container.particles.addParticle(this._lastPosition, particleOptions);
120120

121121
if (interactivityParticleOptions.replaceCursor) {
122-
const element = interactivityData.element as HTMLElement | Window | undefined;
122+
const element = interactivityData.element as HTMLElement | Window | Document | undefined;
123123

124124
if (element) {
125-
if (element instanceof Window) {
125+
if (element instanceof Window || element instanceof Document) {
126126
safeDocument().body.style.cursor = "none";
127127
} else {
128128
element.style.cursor = "none";

plugins/interactivity/src/InteractivityConstants.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ export const clickEvent = "click",
22
mouseDownEvent = "pointerdown",
33
mouseUpEvent = "pointerup",
44
mouseLeaveEvent = "pointerleave",
5-
mouseOutEvent = "pointerout",
65
mouseMoveEvent = "pointermove",
76
touchStartEvent = "touchstart",
87
touchEndEvent = "touchend",

plugins/interactivity/src/InteractivityEventListeners.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import {
55
executeOnSingleOrMultiple,
66
lengthOffset,
77
manageListener,
8+
safeDocument,
89
visibilityChangeEvent,
910
} from "@tsparticles/engine";
1011
import {
1112
mouseDownEvent,
1213
mouseLeaveEvent,
1314
mouseMoveEvent,
14-
mouseOutEvent,
1515
mouseUpEvent,
1616
touchCancelEvent,
1717
touchEndEvent,
@@ -160,10 +160,7 @@ export class InteractivityEventListeners {
160160
this._mouseTouchFinish();
161161
};
162162

163-
private readonly _manageInteractivityListeners: (mouseLeaveTmpEvent: string, add: boolean) => void = (
164-
mouseLeaveTmpEvent,
165-
add,
166-
) => {
163+
private readonly _manageInteractivityListeners: (add: boolean) => void = add => {
167164
const handlers = this._handlers,
168165
container = this._container,
169166
interactionManager = this._interactionManager,
@@ -204,7 +201,7 @@ export class InteractivityEventListeners {
204201
manageListener(interactivityEl, touchEndEvent, handlers.touchEnd, add);
205202
}
206203

207-
manageListener(interactivityEl, mouseLeaveTmpEvent, handlers.mouseLeave, add);
204+
manageListener(interactivityEl, mouseLeaveEvent, handlers.mouseLeave, add);
208205
manageListener(interactivityEl, touchCancelEvent, handlers.touchCancel, add);
209206
};
210207

@@ -220,20 +217,16 @@ export class InteractivityEventListeners {
220217
detectType = options.interactivity?.detectsOn,
221218
canvasEl = container.canvas.element;
222219

223-
let mouseLeaveTmpEvent = mouseLeaveEvent;
224-
225220
/* events target element */
226221
if (detectType === InteractivityDetect.window) {
227-
interactionManager.interactivityData.element = globalThis;
228-
229-
mouseLeaveTmpEvent = mouseOutEvent;
222+
interactionManager.interactivityData.element = safeDocument();
230223
} else if (detectType === InteractivityDetect.parent && canvasEl) {
231224
interactionManager.interactivityData.element = canvasEl.parentElement ?? canvasEl.parentNode;
232225
} else {
233226
interactionManager.interactivityData.element = canvasEl;
234227
}
235228

236-
this._manageInteractivityListeners(mouseLeaveTmpEvent, add);
229+
this._manageInteractivityListeners(add);
237230

238231
manageListener(document, visibilityChangeEvent, handlers.visibilityChange, add, false);
239232
};
@@ -326,7 +319,7 @@ export class InteractivityEventListeners {
326319

327320
const mouseEvent = e as MouseEvent;
328321

329-
if (interactivity.element === globalThis) {
322+
if (interactivity.element === safeDocument()) {
330323
if (canvasEl) {
331324
const clientRect = canvasEl.getBoundingClientRect();
332325

0 commit comments

Comments
 (0)