Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3.js缩放对象而不更改其位置_Javascript_Css_D3.js_Svg - Fatal编程技术网

Javascript D3.js缩放对象而不更改其位置

Javascript D3.js缩放对象而不更改其位置,javascript,css,d3.js,svg,Javascript,Css,D3.js,Svg,我需要缩放svg对象而不改变其相对位置。 特别是我有一个包含一个矩形的组和一个有一些圆的组,我想创建一个过渡,改变矩形的宽度和高度,以相同的比例增加其大小,并用矩形的相同比例因子但不改变其位置的圆来缩放组 var rect = d3.select("svg").selectAll("rect") .transition() .duration(750) .attr("x", function(d) { return tx(d.x); }) .attr("y", function(

我需要缩放svg对象而不改变其相对位置。 特别是我有一个包含一个矩形的组和一个有一些圆的组,我想创建一个过渡,改变矩形的宽度和高度,以相同的比例增加其大小,并用矩形的相同比例因子但不改变其位置的圆来缩放组

var rect = d3.select("svg").selectAll("rect")
  .transition()
  .duration(750)
  .attr("x", function(d) { return tx(d.x); })
  .attr("y", function(d) { return ty(d.y); })
  .attr("width", function(d) { return tx(d.x + d.dx) - tx(d.x); })
  .attr("height", function(d) { return ty(d.y + d.dy) - ty(d.y); });

var tree = d3.selectAll("g.tree")
  .transition()
  .duration(750)
  .attr("transform", function(d) {
    var sx = (tx(d.x + d.dx) - tx(d.x))/x(d.dx),
    sy = (ty(d.y + d.dy) - ty(d.y))/y(d.dy),
    s;
    if(sx > sy) {
      s = sy;
      rx = (tx(d.x)-x(d.x));
      ry = (ty(d.y)-y(d.y));
    }
    else {
    s = sx;
    rx = (tx(d.x)-x(d.x));
    ry = (ty(d.y)-y(d.y));
    }
    return "scale("+s+")"+"translate("+rx+","+ry+")";});

  d3.event.stopPropagation();

您可以在JSFIDLE中添加您的工作吗?很抱歉,这是不可能的,因为我在项目中使用了一些本地文件;我的问题是,当我缩放组时,它也会转换为改变其相对于矩形的位置。听起来你需要单独缩放每个元素。