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

Cannot avoid brush selection reset #22

Closed
AlainRo opened this issue Nov 7, 2016 · 1 comment
Closed

Cannot avoid brush selection reset #22

AlainRo opened this issue Nov 7, 2016 · 1 comment

Comments

@AlainRo
Copy link

AlainRo commented Nov 7, 2016

A click in the extent outside the selection rectangle reset the 2D brush selection to null. Fair enough.
But is it possible to take control of this behavior which occurs before the brush start event ??

This issue can be seen in this example:
http://bl.ocks.org/AlainRo/9264cd08e341f2c92f020c39642c34d1

@mbostock
Copy link
Member

mbostock commented Nov 7, 2016

As I like to say, everything is possible, it’s just a question of how much work is involved. You have a few options:

  • Remove the overlay element from the brush after applying it.
svg.append("g")
    .attr("class", "brush")
    .call(d3.brush().on("brush", brushed))
  .selectAll(".overlay")
    .remove();
  • Register a listener that takes priority for input events that would initiate a brush gesture, namely mousedown or touchstart. See zoom behavior disables click events on child elements d3-zoom#66 (comment) for a related discussion of event propagation; probably the easiest thing is to use a capturing event listener and then call event.stopImmediatePropagation (or event.stopPropagation) to prevent the brush from receiving the initiating input event.
  • Use brush.filter to tell the brush to ignore input events on the overlay (using event.target to detect the receiving element; see brush.js), so that they won’t start a brush gesture.
  • Use a start brush event listener to set the brush selection to something other than null as desired. See Brush Snapping II for an example, although note that this doesn’t snap the brush on start (because it intentionally preserves the normal brush behavior of letting you clear the brush selection by clicking on the background).

If you have further questions, please use Stack Overflow tag d3.js to ask for help. Although I make an effort to assist everyone that asks, I am not always available to provide help promptly or directly. Stack Overflow provides a better collaborative forum for self-help: tens of thousands of D3-related questions have already been asked there, and some answered questions may be relevant to you.

If you have a question about D3’s behavior and want to discuss it with other users, also consider the d3-js Google Group or joining the d3-js Slack.

Thank you! 🤗

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

No branches or pull requests

2 participants