Ich habe das folgende d3 / d3fc-Diagramm
https://codepen.io/parliament718/pen/BaNQPXx
Das Diagramm hat ein Zoomverhalten für den Hauptbereich und ein separates Zoomverhalten für die y-Achse. Die y-Achse kann zum erneuten Skalieren gezogen werden.
Das Problem, das ich nicht lösen kann, besteht darin, dass nach dem Ziehen der y-Achse zum erneuten Skalieren und anschließenden Schwenken des Diagramms ein "Sprung" im Diagramm auftritt.
Offensichtlich haben die 2-Zoom-Verhaltensweisen eine Unterbrechung und müssen synchronisiert werden, aber ich zerbreche mir den Kopf, um dies zu beheben.
const mainZoom = zoom()
.on('zoom', () => {
xScale.domain(t.rescaleX(x2).domain());
yScale.domain(t.rescaleY(y2).domain());
});
const yAxisZoom = zoom()
.on('zoom', () => {
const t = event.transform;
yScale.domain(t.rescaleY(y2).domain());
render();
});
const yAxisDrag = drag()
.on('drag', (args) => {
const factor = Math.pow(2, -event.dy * 0.01);
plotArea.call(yAxisZoom.scaleBy, factor);
});
Das gewünschte Verhalten besteht darin, die Achse zu zoomen, zu schwenken und / oder neu zu skalieren, um die Transformation immer von jedem Ort aus anzuwenden, an dem die vorherige Aktion beendet wurde, ohne "Sprünge".