編輯 我找到了一個解決方案,使用稍舊版本的dagre-d3庫(4.11)。如果任何人都可以找到最新版本的問題,那也會有幫助。謝謝在使用Dagre縮放後重新呈現HTML d3
我使用Dagre d3繪製一些圖。
當我開始我的渲染圖,我做
g = new dagreD3.graphlib.Graph()
.setGraph({})
.setDefaultEdgeLabel(function() { return {}; });
var svg = d3.select("svg"),
inner = svg.select("g");
svgGroup = svg.append("g");
var render = new dagreD3.render();
render(d3.select("svg g"), g);
var zoom = d3.behavior.zoom().on("zoom", function() {
inner.attr("transform", "translate(" + d3.event.translate + ")" +
"scale(" + d3.event.scale + ")");
currentZoomScale = d3.event.scale;
currentPosition = d3.event.translate;
});
svg.call(zoom);
然後,當某個節點上的用戶點擊,我想追加HTML到該節點的標籤。這並不表明,除非我重新渲染圖,這是我用下面的操作:
g.node(id).label += "<div>" + inputTemplate + "</div>";
var zoom = d3.behavior.zoom()
.scale(currentZoomScale)
.on("zoom", function() {
inner.attr("transform", "translate(" + d3.event.translate + ")" + "scale(" + d3.event.scale + ")")
});
svg.call(zoom);
d3.select("svg").on("dblclick.zoom", null);
inner.attr("transform", "translate(" + currentPosition + ")" + "scale(" + currentZoomScale + ")");
我認爲,通過保持currentPosition
和currentZoomScale
我將能夠確保圖形保持縮放和重新好後-rendering。但這種情況並非如此。我的所有節點都成爲我是否縮小小,大,如果我放大。
你說的「保持良好」是什麼意思? –