Comments (6)
The "wheel" event is remarkably un-configurable, including the hardcoded 500
constant. I would like to have some options here.
-
would a PR including support for dynamic configuration of this
500
value be wanted/accepted? -
alternatively, what about a user-specified callback that converts a normalized wheel delta value to the final
k
value?
from d3-zoom.
@mbostock what is your opinion re. my previous comment? Would you accept a PR as described?
from d3-zoom.
Your comment is unrelated to this issue, which is about whether the dblclick event should round to the nearest power-of-two zoom level, or alternatively whether the wheel and touch gestures should round to the nearest power-of-two zoom level after the gesture ends.
If you want an immediate solution, you can remove or replace the wheel event listener registered by the zoom behavior:
selection
.call(zoom) // Register the zoom behavior as normal.
.on("wheel.zom", wheeled); // Replace the wheel listener with your own.
In your wheeled
function, you can then programmatically drive the zoom behavior however you like using zoom.transform.
I think it’d be reasonable to have a zoom.wheelDelta function whose default implementation is:
function wheelDelta() {
return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1) / 500);
}
This function could then be configured (optionally as a constant, which is then promoted to a function) to change the behavior.
from d3-zoom.
Your comment is unrelated to this issue, which is about whether the dblclick event should round to the nearest power-of-two zoom level, or alternatively whether the wheel and touch gestures should round to the nearest power-of-two zoom level after the gesture ends.
I am terribly sorry for using a wrong issue. I considered this one as a general question of d3-zoom's configurability (especially regarding the wheel
event).
If you want an immediate solution, you can remove or replace the wheel event listener registered by the zoom behavior:
I am aware of this approach. But rather than introducing a custom solution, improving D3's sounds like a better idea to me.
I think it’d be reasonable to have a zoom.wheelDelta function whose default implementation is:
Cool, I will try to hack something together and send a PR.
Sorry again for posting in a wrong place.
from d3-zoom.
Power-of-two rounding on dblclick was removed in 31d895f.
from d3-zoom.
If we allow zoom.scaleBy to take a reference point #178, rather than using only the viewport centroid, then this will be fairly easy to do programmatically, so I don’t think we need a separate issue for this special case.
from d3-zoom.
Related Issues (20)
- svg.call(d3.zoom().on('zoom',function(){})) warning : Argument of type 'ZoomBehavior<Element, unknown>' is not assignable to parameter of type '(selection: Selection<BaseType, unknown, HTMLElement, any>, ...args: any[]) => void'. HOT 2
- Option to pan with trackpad scroll and zoom with pinch? HOT 1
- Predefined events override manual transformations
- Mismatched link in README HOT 2
- documentation for zoom.on does not provide sufficient information to understand its use HOT 2
- Filtering doesn't work as expected for mouse events on macOS HOT 2
- Default zoom tween for translation animation surprising / More control over zoom animation tweens wanted HOT 2
- Zoom event listeners are passed an incorrect sourceEvent if a programmatic zoom occurs during a user zoom gesture
- Listen for zoom events with without d3-selection? HOT 2
- How to pan by dragging the trackpad with two fingers? HOT 1
- Zoom "end" is not called when pinch zooming and you start the zoom with the 2nd finger outside the chart HOT 2
- Navigator.maxTouchPoints is always 0 and should not be used
- selection.interrupt is not a function,
- iPhone Performance issues since iOS 16 HOT 1
- Zoom performance issues from iOS 16 onwards HOT 3
- function scale in Transform should support kX and kY instead of k HOT 1
- First zoom doesn't move scale to within scaleExtent HOT 2
- Referencing width on SVGElement when expected type is actually SVGSVGElement HOT 1
- Zoom Behaviour: disabling zoom.click and zoom.dblclick doesn't actually stop zoom behaviour from firing.
- select(...).transition is not a function HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from d3-zoom.