У меня есть график d3, который позволяет управлять панорамированием и масштабированием. Он также имеет функцию subGraph, которая позволяет пользователю расширять и сворачивать subGraph. Когда пользователь нажимает на значок, чтобы открыть и закрыть подграф этот код работает:Как сохранить текущий масштаб масштабирования и уровень перевода при повторном рендеринге
btn.on("click", function(d:any, i:any) {
parentNode = nodeObject; // gives me he x and y coordinates of the parent node
d3.event["stopPropagation"]();
e["subGraph"].expand = !expand; // add or remove subGraph
window.resetGraph = !window.resetGraph;
console.log(window.resetGraph);
if (window.resetGraph) {
window.scale = window.zoom.scale();
window.translate = window.zoom.translate();
window.zoom.scale(1).translate([0 , 0]);
} else {
window.zoom.scale(window.scale).translate(window.translate);
}
console.log(window.zoom.scale());
console.log(translate);
renderGraph();
});
Я по существу добавление и удаление подграф свойства узла по щелчку значка. Затем полностью перерисовываем график.
Я могу получить координаты x и y родительского контейнера, но если я перерисовываю график, как я могу сделать рендеринг графика так, чтобы график оставался в том же масштабе и переводе, как это было тогда Я нажал на значок subGraph. Я пытаюсь перерисовать график в том же положении, что и раньше, только когда subGraph либо расширен, либо свернут. Ниже приведен код, который, кажется, мне борьбу, когда граф оказывает:
var scaleGraph = function() {
var graphWidth = g.graph().width + 4;
var graphHeight = g.graph().height + 4;
var width = parseInt(svg.style("width").replace(/px/, ""), 10);
var height = parseInt(svg.style("height").replace(/px/, ""), 10);
var zoomScale = originalZoomScale;
// Zoom and scale to fit
if (ctrl.autoResizeGraph === "original") {
zoomScale = initialZoomScale;
}
translate = [(width/2) - ((graphWidth * zoomScale)/2) + 2, 1];
zoom.center([width/2, height/2]);
zoom.size([width, height]);
zoom.translate(translate);
zoom.scale(zoomScale);
zoom.event(svg);
};
Если я проверяю, если тумблер икона была нажата, можно перерисовывать график с таким же масштабом и перевода, прежде чем он был перерисовать?
Thanks
Благодаря Ganesh, просто чтобы убедиться, что я правильно понять, что window.zoom отслеживает текущий масштаб и транслируют и будет считать, что, поскольку график повторно отображает? Потому что мне нужно повторно рисовать график с обновленным узлом, когда subGraph либо расширен, либо свернут. Я обновил свой начальный пост тем, что хочу, чтобы сделать работу. Еще раз спасибо – bschmitty
Да, переменные окна отслеживают текущий масштаб. При совместном использовании объекта масштабирования шкалы автоматически обновляются, чтобы отображать координаты масштабирования. Поэтому, когда вы делаете рендер, он должен работать. Я также призываю метод draw снова в приведенной выше скрипке. Пожалуйста, отметьте как ответ, если он будет работать. – Ganesh
Будет определенно отмечен как ответ, если он будет работать. Я обновил свой пост. Я нажимаю на значок переключения, который расширяет или сворачивает график, затем получает переменные окна и перерисовывает весь граф. Могу ли я по-прежнему вызывать функцию scaleGraph с помощью этого подхода или мне не нужно? Переменные окна переопределяют методы масштабирования, которые я вызываю в scaleGraph? Спасибо – bschmitty