javascript - 从中心缩放矩形元素

标签 javascript d3.js svg

我目前正在使用 rect 元素作为 map 上的点,我想缩放它们的大小,但 D3 动画总是从左上角开始对宽度/高度的变化进行动画处理。有没有一种方法可以从中心点缩放矩形,以便在设置动画时向所有方向扩展?

这是简单的 D3 代码。它正在为宽度、高度 rx 和 ry 的变化设置动画。

.selectAll(".anchor")
    .transition()
    .duration(800)
    .delay(function (d, i) {
        return i * 50;
    })
    .attr("fill", _graphics.colors.red)
    .attr("stroke", _graphics.colors.charcoal)
    .attr("width", 10)
    .attr("rx", function (d) {
        return 10 / 2
    })
    .attr("ry", function (d) {
        return 10 / 2
    });

最佳答案

您可以使用所有参数(xywidthheight)。如果 width 应该增加 100,则将 x 减少 100/2=50 将使矩形似乎从它的中心开始生长:

var svg = d3.select("body").append("svg")
  .attr("width", 700)
  .attr("height", 400);

var data = [
  { x: 50, y: 50, width: 25, height: 50 },
  { x: 180, y: 65, width: 40, height: 20 }
];

svg.selectAll("rect")
  .data(data)
  .enter()
  .append("rect")
  .attr("x", function(d) { return d.x; })
  .attr("y", function(d) { return d.y; })
  .attr("width", function(d) { return d.width; })
  .attr("height", function(d) { return d.height; })
  .style("fill", "blue")
  .transition()
    .duration(3000)
    .attr("x", function(d) { return d.x - 25; })
    .attr("y", function(d) { return d.y - 50; })
    .attr("width", function(d) { return d.width + 50; })
    .attr("height", function(d) { return d.height + 100; });
<script src="https://d3js.org/d3.v5.js"></script>

关于javascript - 从中心缩放矩形元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49824051/

相关文章:

Javascript日期计算夏令时错误

JavaScript - 如何从脚本内容中检索 src =""url?

javascript - SVG 世界地图坐标

javascript - 如何使用 CreateSVGRect 在 SVG 文档中创建样式矩形?

javascript - 如果通过 JavaScript 自动输入值,jQuery Validate 不会消除错误

javascript - 将对象与新值连接起来并将其转换为数组

javascript - 反转 D3 中的 Y 轴

D3.js v4 - 为条形图设置填充

javascript - 如何使用 d3 在放大的 Canvas 上进行缩放/平移?

css - 在 CSS 中混合简单的颜色