【问题标题】:d3js zooming groups of circlesd3js缩放圆圈组
【发布时间】:2016-02-27 08:38:48
【问题描述】:

我是第一次尝试 d3.js 缩放行为,我很难让它发挥作用。我的要求是在 svg 元素中进行放大、缩小行为,其中浏览器的缩放行为应该被禁用,并且只有 svg 内的圆圈应该在放大/缩小时增加/减少其半径。

总而言之,当用户滚动鼠标时,svg 的宽度、高度不应该改变。只是圆圈应该改变它的半径。

这是我现在所拥有的,谁能帮我填写一下?

<g>
    <circle id='top' cx="180" cy="120" r="30" style="stroke: white; stroke-width: 2px; fill:white"/>
</g>
<g>
    <circle id='top' cx="200" cy="220" r="30" style="stroke: white; stroke-width: 2px; fill:white"/>
</g>
<g>
    <circle id='top' cx="320" cy="150" r="50" style="stroke: white; stroke-width: 2px; fill:white"/>
</g>

var zoom = d3.behavior.zoom()
            .scaleExtent([1, 8])
            .on("zoom", function () {

            console.log('zooming');

            var graph = d3.select('svg');

            graph
                .selectAll('g')
                .attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");


        });



    var svg = d3.select('svg').append('g').call(zoom);

【问题讨论】:

    标签: javascript css d3.js svg


    【解决方案1】:

    将缩放监听器绑定到 SVG 而不是新组。

    更改以下代码行

    var svg = d3.select('svg').append('g').call(zoom);
    

    var svg = d3.select('svg').call(zoom);
    

    完整代码:

    var zoom = d3.behavior.zoom()
      .scaleExtent([1, 8])
      .on("zoom", function() {    
        var graph = d3.select('svg');
        graph
          .selectAll('g')
          .attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
      });
    var svg = d3.select('svg').call(zoom);
    

    这是工作的JSFiddle

    【讨论】:

    • 它工作正常,但是当我向圆圈添加拖动事件时它会搞砸,我会添加一个小提琴。
    • 在下面的小提琴缩放中,无需拖动即可正常工作,当我添加拖动时,它将拖动应用于所有组。 jsfiddle.net/fawzan/6225w3j7
    • 我问了一个单独的问题。 stackoverflow.com/questions/33915304/…
    • 我已经回答了这个问题。 :)
    猜你喜欢
    • 2021-12-22
    • 2017-04-09
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多