Skip to content

Pointer should ignore clicks on other marks #2298

Closed as not planned
Closed as not planned

Description

@mootari

Consider the following example where a bar mark is used to highlight and pick selections, with a dot mark on top that has external links.

Clicking on any of the dots (either left click to open the link directly, or right click to open the context menu) will also pin the pointer selection.

Plot.plot({
  marks: [
    Plot.barY("abcd", Plot.pointerX({x: d => d, fill: "#eee", maxRadius: Infinity})),
    Plot.dotX("abcd", {r: 30, fill: d => d, href: d => `https://google.com/?q=${d}`})
  ],
})
Image

As an aside, the pointerdown handler should perhaps only respond to "pure" left clicks (button=0 and no modifier keys pressed).

Activity

  1. Fil commented on Mar 14, 2025

    @Fil
    Contributor

    related: #1832

  2. mootari commented on Mar 14, 2025

    @mootari
    ContributorAuthor

    ... I guess this request is largely incompatible with how Pointer is currently implemented, given that it is point/proximity based and has no notion of event targets?

    Workaround to exclude a single mark:

    Plot.plot({
      marks: [
        Plot.barY("abcd", Plot.pointerX({x: d => d, fill: "#eee", maxRadius: Infinity})),
        Plot.dotX("abcd", {r: 30, fill: d => d, href: d => `https://google.com/?q=${d}`, render(...args) {
          const ret = args.pop().apply(this, args);
          ret.addEventListener("pointerdown", e => e.stopPropagation());
          return ret;
        }})
      ],
    })
  3. mootari commented on Mar 14, 2025

    @mootari
    ContributorAuthor

    Alternative workaround that's a bit more flexible: https://observablehq.com/@mootari/plot-group

  4. mbostock commented on Apr 6, 2026

    @mbostock
    Member

    The pointer transform is based on the closest point to the pointer, not the shape of the rendered mark.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn’t working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions