Я переношу свой код d3 с v3 на v4 и имеет проблемы с поиском эквивалента для свойств d3.zoom.x, d3.zoom.y.d3v4 - масштабирование (эквивалентно d3.zoom.x)
Вот короткая часть кода, в том числе наиболее важных элементов:
this.init = function(obj, def) {
/* X-axis */
x = d3.scaleTime()
.range([0, width]);
xAxis = d3.axisBottom(x)
.ticks(ticks);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")");
/* Y-axis */
for (var i = 0; i < 1; i++) {
// Returns the y and yAxis as arrays
createYAxis(i);
}
initZoom();
};
// Zoom trigger
var drawUpdXY = function(){
setPause(true);
drawUpd();
zoomY.y(y[0]);
zoomX.x(x);
zoom = d3.zoom()
.on("zoom", drawUpdXY);
zoomX = d3.zoom()
.on("zoom", drawUpdX);
zoomY = d3.zoom()
.on("zoom", drawUpdY);
};
Я пытался использовать это, чтобы заменить «zoom.x (х); zoom.y (у [0]) "
xAxis.scale(d3.event.transform.rescaleX(x));
yAxis[0].scale(d3.event.transform.rescaleY(y[0]));
Однако они только изменяют масштаб оси, оставляя данные незамкнутыми.
Поскольку это довольно старый, вы когда-нибудь найти решение? Я застрял в той же проблеме. – jmk
Не найдено решений по сей день - я решил подождать, пока есть большая община для v4. –
** _ tl; dr: _ Это может помочь реструктурировать ваш рефакторинг, увидеть ссылки для прохода через почему и как, и пример этого работает ** Я работаю над аналогичным проектом, пытающимся реализовать панорамирование/масштабирование системы координат сетки в d3v4 и React. По пути я использовал это [статья, объясняющую, как работает новое масштабирование/панорамирование) (http://emptypipes.org/2016/07/03/d3-panning-and-zooming/), и заставило меня понять, что мне пришлось переосмыслить, как я структурировал свой рефактор. Затем я создал этот код (код того, что я пытался сделать) (https://codepen.io/mduleone/pen/wJxrbj) в чистом d3. Все еще работает на стороне Реагента. – mduleone