调整大小时重新绘制SVG

乐宝

我正在尝试在d3中的窗口调整大小上重新绘制SVG图表,但没有使用viewBoxpreserveAspectRatio参数(我不喜欢它们如何处理文本)。

在附加单个元素(不基于支持的数据)时,我还尝试通过Bostock的建议坚持d3的数据绑定设计

我有一些归结为这一点(jsFiddle)。但是,SVG元素的宽度/高度永远不会更新。

的HTML

<div class="chart-container">
    <button class="user-option">Some User Options</button>
    <div class="svg-container"></div>
</div>

Java脚本

$(window).on("resize", function () {
    draw();
});

function draw() {
    var container = d3.select('.chart-container');
    var drawWidth = Math.round(0.80 * container.node().clientWidth);
    var drawHeight = Math.round(drawWidth * (3 / 4)); // Fixing a 4/3 aspect ratio

    /*
     * Use an inner g element as the SVG canvas in order to set and forget margins.
     * See http://bl.ocks.org/mbostock/3019563
     */
    var margin = {
        top: 10,
        right: 30,
        bottom: 50,
        left: 40
    };
    var width = drawWidth - margin.left - margin.right;
    var height = drawHeight - margin.top - margin.bottom;

    var svg = container.select(".svg-container").selectAll('svg')
            .data([0]) // Single data element to create SVG if it doesn't exist
        .enter().append("svg")
            .attr("width", drawWidth)
            .attr("height", drawHeight)
        .append("g")
            .attr("class", "canvas")
            // jsFiddle doesn't translate correctly, maybe because of frames???
            .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

    console.debug(svg.node()); // null on resize???

    // Add some random SVG element
    svg.selectAll('rect')
            .data([0]) // Single data element to create SVG if it doesn't exist
        .enter().append('rect')
            .attr({
                x: 0,
                y: 0,
                width: drawWidth - margin.right - margin.left,
                height: drawHeight - margin.bottom - margin.top
            });
}
乐宝

谢谢,我能够从您的所有答案中找到正确的解决方案!然而,无论答案是能够更新调整大小的SVG保持svg变量作为g元素(坚持使用保证金约定)。我最终做了

// Create SVG element (if it doesn't exist)
var svg = container.select(".svg-container").selectAll('svg').data([null]);
svg.enter().append("svg");
svg.attr({width: drawWidth, height: drawHeight}); // apply to enter + update selections

// Create g element (if it doesn't exist) and remap the svg variable
svg = svg.selectAll(".canvas").data([null]);
svg.enter().append("g") // apply to enter selection only
    .attr("class", "canvas")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在窗口调整大小时重新绘制SVG地图?

来自分类Dev

强制“ Rallychart”组件在容器调整大小时重新绘制

来自分类Dev

调整窗口大小时重新绘制/擦除画布

来自分类Dev

在父容器调整大小时重新绘制Google地图

来自分类Dev

使wxWidgets面板在调整大小时始终重新绘制

来自分类Dev

调整窗口大小时重新绘制/擦除画布

来自分类Dev

Java swing-调整大小时,重新绘制会复制组件(JButton和JLabel)

来自分类Dev

在窗口调整大小时重新运行jQuery插件实例

来自分类Dev

尝试调整分区大小时重新启动

来自分类Dev

使用CSS重新调整列大小时的怪异现象

来自分类Dev

调整终结者窗口大小时重新加载zsh

来自分类Dev

调整窗口大小时重新验证DIV的尺寸

来自分类Dev

使用引导程序调整大小时重新缩放文本

来自分类Dev

SVG图标在调整大小时无法正确显示

来自分类Dev

在窗口调整大小时刷新SVG坐标

来自分类Dev

调整窗口大小时如何设置 svg 以更改位置?

来自分类Dev

如何强迫设计师重新绘制调整大小的矩形?

来自分类Dev

如何在画布上重新绘制以调整大小而不会模糊?

来自分类Dev

pyQt QWidget'闪烁'调整大小并重新绘制

来自分类Dev

在tkinter中调整画布大小并重新绘制

来自分类Dev

在鼠标绘图上重新绘制画布并调整其大小

来自分类Dev

Highcharts-销毁图例后重新绘制/调整图表大小?

来自分类Dev

如何在调整窗口大小时重新调整引导程序中的行?

来自分类Dev

当MainWindow调整大小时,调整QDialog的大小

来自分类Dev

svg - 调整路径大小时保持填充纹理的原始大小

来自分类Dev

有时不会在调整大小时绘制arcTo

来自分类Dev

调整大小时使图像居中

来自分类Dev

调整大小时淡入/淡出

来自分类Dev

调整大小时网站毁了

Related 相关文章

  1. 1

    如何在窗口调整大小时重新绘制SVG地图?

  2. 2

    强制“ Rallychart”组件在容器调整大小时重新绘制

  3. 3

    调整窗口大小时重新绘制/擦除画布

  4. 4

    在父容器调整大小时重新绘制Google地图

  5. 5

    使wxWidgets面板在调整大小时始终重新绘制

  6. 6

    调整窗口大小时重新绘制/擦除画布

  7. 7

    Java swing-调整大小时,重新绘制会复制组件(JButton和JLabel)

  8. 8

    在窗口调整大小时重新运行jQuery插件实例

  9. 9

    尝试调整分区大小时重新启动

  10. 10

    使用CSS重新调整列大小时的怪异现象

  11. 11

    调整终结者窗口大小时重新加载zsh

  12. 12

    调整窗口大小时重新验证DIV的尺寸

  13. 13

    使用引导程序调整大小时重新缩放文本

  14. 14

    SVG图标在调整大小时无法正确显示

  15. 15

    在窗口调整大小时刷新SVG坐标

  16. 16

    调整窗口大小时如何设置 svg 以更改位置?

  17. 17

    如何强迫设计师重新绘制调整大小的矩形?

  18. 18

    如何在画布上重新绘制以调整大小而不会模糊?

  19. 19

    pyQt QWidget'闪烁'调整大小并重新绘制

  20. 20

    在tkinter中调整画布大小并重新绘制

  21. 21

    在鼠标绘图上重新绘制画布并调整其大小

  22. 22

    Highcharts-销毁图例后重新绘制/调整图表大小?

  23. 23

    如何在调整窗口大小时重新调整引导程序中的行?

  24. 24

    当MainWindow调整大小时,调整QDialog的大小

  25. 25

    svg - 调整路径大小时保持填充纹理的原始大小

  26. 26

    有时不会在调整大小时绘制arcTo

  27. 27

    调整大小时使图像居中

  28. 28

    调整大小时淡入/淡出

  29. 29

    调整大小时网站毁了

热门标签

归档