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

Brush with handle #14

Closed
sepans opened this issue Aug 29, 2016 · 4 comments
Closed

Brush with handle #14

sepans opened this issue Aug 29, 2016 · 4 comments

Comments

@sepans
Copy link

sepans commented Aug 29, 2016

Trying to follow this example to add handle to the brush using:

brushEl.selectAll(".handle").append("path").attr("d", _handlePath)  //_handlePath generates the handle graphic

The path doesn't show up since .handle element is a rect instead of g. As soon as I change the d3-brush source code here to handle.enter().append("g") it works.

Am I doing something wrong or the .handle needs a wrapping g?

Thank you

@mbostock
Copy link
Member

The example you’ve linked uses the v3 API. The structure of the brush changed in v4, as documented in the README. You can still add custom elements to the brush, but you should add them to the brush element itself, rather than adding it to the handle element. In addition, in v4 you are responsible for repositioning your handle whenever the brush moves (typically by listening for brush events); you can no longer rely on the brush moving custom handle elements for you. For interaction, you must also bind a data object with the appropriate type field (e.g., {type: "e"} for a left-edge handle) to any custom elements you add to the brush.

@Fil
Copy link
Member

Fil commented Oct 2, 2016

Here's a d3 v4 port of Mike's block
http://bl.ocks.org/Fil/013d52c3e03aa7b90f71db99eace95af

Bottom line: everything has changed.

  • extent() doesn't mean the same thing as before
  • getting the current values is different (you need to read it from the node that contains it, it's not in the brush itself anymore. Because a brush is now a factory that you apply to a selection (similar to d3.axis).
  • I couldn't see how to pass a scale, and had to apply it myself (am I missing something?)
  • you effectively need to move and possibly hide/show the handles yourself during the brush event

This was certainly the most difficult port to d3 v4 I've done.

@mbostock
Copy link
Member

mbostock commented Oct 3, 2016

Prodded by @Fil, I have updated my own example to v4. http://bl.ocks.org/mbostock/4349545

@sepans
Copy link
Author

sepans commented Oct 7, 2016

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

3 participants