javascript - 平移后缩放路径对象
问题描述
我已经设置了一些代码来获取路径、缩放和移动,但是似乎一旦新的变换到位,旧的变换就会被删除?如何移动和缩放路径?
var path = svg.append('path')
.attr('d', function(d) {
var x = 100, y = 100;
return path;
})
.style("fill", "#1a5d18")
.attr("transform", "translate(300,0)");
var path = path.attr("transform","scale(.3)");
解决方案
如您所知,设置新的transform
将覆盖前一个。
让我们在这个基本演示中看到这一点:
const circle = d3.select("circle");
circle.attr("transform", "translate(100,50)");
circle.attr("transform","scale(.3)");
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg>
<circle r="50"></circle>
</svg>
如您所见(实际上,您看不到!),我们将圆移动到100,50
,但scale(0.3)
使圆回到原来的位置。
一个可能的解决方案是获取先前的transform
值。不幸的是,D3 v4 和 v5 不再有d3.transform
,但可以替换,如本答案中所述。
但是,在您的特定情况下,您可以直接在 DOM 元素中使用getAttribute获取先前的translate
值,并添加.scale
这是演示:
const circle = d3.select("circle");
circle.attr("transform", "translate(100,50)");
circle.attr("transform", function() {
return this.getAttribute("transform") +
" scale(0.3)";
});
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg>
<circle r="50"></circle>
</svg>
推荐阅读
- python - 如何在 Python 3.8+ 和 Python 2.7 中使用 collections.abc
- python - 有没有办法在熊猫中查看更多列。它只列出第一列和最后一列
- python - Python库将哈希值生成为数字
- python - 如果字典出现一次,则按值对字典进行排序,否则按键排序
- android - 如何在 MVVM 中正确获取从存储库到视图模型的改造数据?
- c - 如何将结构成员分配给C中的变量
- c++ - 如何以 C++ 之类的语言验证硬件中实际执行的代码?
- docker - Nginx反向代理和路径位置
- java - 查找具有子路径并具有最大 gcd 的路径(起始节点,结束节点)
- postgresql - PostgreSQL 10 => 11.1 pg_upgrade Postmaster 使用旧集群