Mam następujący wykres d3 / d3fc
https://codepen.io/parliament718/pen/BaNQPXx
Wykres ma zachowanie powiększenia dla głównego obszaru i osobne zachowanie powiększenia dla osi y. Oś y można przeciągnąć, aby zmienić skalę.
Problem, który mam problem z rozwiązywaniem, polega na tym, że po przeciągnięciu osi y w celu przeskalowania, a następnie przeskanowaniu wykresu na wykresie pojawia się „skok”.
Oczywiście 2 zachowania zoomu są rozłączone i muszą zostać zsynchronizowane, ale staram się to naprawić.
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);
});
Pożądanym zachowaniem jest powiększanie, przesuwanie i / lub przeskalowanie osi, aby zawsze zastosować transformację od miejsca, w którym zakończyła się poprzednia akcja, bez żadnych „skoków”.