javascript - 使用 Dagre d3 缩放后重新渲染 HTML

标签 javascript d3.js svg dagre-d3

编辑 我找到了一个涉及使用稍旧版本的 dagre-d3 库 (4.11) 的解决方案。如果有人能找到最新版本的问题,那也会有所帮助。谢谢

我正在使用 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 + ")");

我认为通过维护 currentPositioncurrentZoomScale 我可以确保图形在缩放和重新渲染后保持良好状态。但这种情况并非如此。如果我缩小,我的所有节点都会变小,如果我放大,我的所有节点都会变大。

最佳答案

我不是很清楚这个问题,但可能是因为你在第二行包含了 .scale(currentZoomScale)

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 + ")");

然后您在 innner.attr() 中再次缩放它?

关于javascript - 使用 Dagre d3 缩放后重新渲染 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196700/

相关文章:

javascript - 为什么在 JavaScript 中向后循环时使用 -1?

javascript - jquery 在 Internet Explorer 8 中未正确执行

javascript - 我如何循环遍历javascript中的编号变量

javascript - 如何将 D3 图形移动到初始缩放和 0,0 位置 - 重置图形?

html - 添加颜色和图像以填充 SVG 圆圈

提交按钮上的 javascript 验证

javascript - D3 : How to assign size, 项目颜色(碰撞检测可视化)

javascript - 用于加速/减速运动的 d3 缓动函数

Wordpress:使用 svg 作为标题图片

html - 如何在不将整个 SVG 标签放入 HTML 的情况下设置部分 SVG 的样式?