Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pointer-{leave,out} fired multiple times on single "leave" #801

Open
5 tasks done
andretchen0 opened this issue Aug 17, 2024 · 0 comments
Open
5 tasks done

pointer-{leave,out} fired multiple times on single "leave" #801

andretchen0 opened this issue Aug 17, 2024 · 0 comments
Assignees

Comments

@andretchen0
Copy link
Contributor

andretchen0 commented Aug 17, 2024

Describe the bug

An object's pointer-leave event is fired more than once on a single "leave" if it is the descendant of another element that also defines a pointer-leave:

<TresGroup @pointer-leave="() => {}">
  <TresMesh @pointer-leave="() => { console.log('Leave') }">
    <TresBoxGeometry :args="[1, 1, 1]" />
    <TresMeshToonMaterial color="#efefef" />
  </TresMesh>
</TresGroup>

See also: pointer-out exhibits similar behavior.

Reproduction

https://stackblitz.com/edit/tresjs-minimal-reproduction-qd169j?file=src%2Fcomponents%2FTheExperience.vue

Steps to reproduce

  • Open Stackblitz link in a browser.
  • Mouse over cube, then leave.
  • See browser console: multiple pointer-leave events will be logged.

System Info

No response

Used Package Manager

npm

Code of Conduct

@andretchen0 andretchen0 self-assigned this Aug 17, 2024
@andretchen0 andretchen0 changed the title pointer-leave fired multiple times on single "leave" pointer-{leave,out} fired multiple times on single "leave" Aug 17, 2024
andretchen0 added a commit that referenced this issue Sep 12, 2024
* (fix) BREAKING - remove `event.intersects` – use `event.intersections`
* (fix) BREAKING - remove `event.stopPropagating` – use `event.stopPropagation`
* (fix) BREAKING – from TresCanvas, don't emit pointer/click events bubbled from Tres objects
* (fix) BREAKING – `event.delta` is now reset to `0` following a `click`.
* (fix) BREAKING – `pointerleave` handlers were sent previous intersections at `event.intersections`, now current intersections.
* (fix) BREAKING – `@dblclick` now fires whenever the canvas `dblclick` is emitted. Any TresObject with an `@dblclick` handler will receive the event if it is under the pointer. (Previously objects not under the initial click did not receive the `@dblclick`.)
* (fix) `event.pointer` is now defined – previously typed but was `undefined` in implementation.
* (fix) `event.unprojectedPoint` is now properly calculated. Was previously left as `TODO`.
* (fix) `event.eventObject` holds the object that registered the event handler. Was previously typed but `undefined` in implementation.
* (fix) use Vue-style ("flatcase") event names, e.g. `@pointerdown`. Keep support for old-style ("kebab-case") event names, e.g. `@pointer-down`, and warn. Mixing both on the same object is not supported and may lead to handlers being overwritten.
* (fix) `@pointer{leave,out}` was fired multiple times on a single "leave" – Issue #801
* (feat) BREAKING – `pointermissed` fires when the object that registered the handler is missed – previously only fired when ALL objects were missed
* (feat) add filtering/sorting for intersections, prior to handling events. `:events={filter: (intersections) => ...}`
* (feat) support Vue event modifiers – `stop, prevent, self, once`. (Tres cannot support `passive` and does not currently support `capture`.)
* (feat) via `:events-target` prop, allow users to specify an HTML `addEventListener` target – allows Tres to respond to events, even if there's an overlay on the canvas.
* (feat) via `:events-enabled` prop, allow `eventManager` to be enabled/disabled while Tres is running.
* (feat) via `:events` prop, allow `eventManager` functions to be set/overwritten (non-reactive).
* (feat) via `:events` prop, allow events system to be disabled completely: `<TresCanvas :events="null" />` (non-reactive)
* (feat) `pointer{leave,out}` is triggered (if necessary) just prior to object removal.
* (feat) `:blocking="true"` makes a subtree "solid"; objects behind objects in the subtree will not be "hit".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: No status
Development

No branches or pull requests

1 participant