javascript - d3 向 d3.xml 加载的元素添加缩放功能

标签 javascript d3.js svg

我使用 d3.xml 动态加载 svg 图像。然后,我想使用 d3.behavior.zoom() 将缩放功能附加到此 svg。

谁能解释一下如何将 d3.behavior.zoom() 与加载的 svg 链接起来?我在网上找不到任何东西。

请参阅下面的当前代码:

JS

<script src="http://d3js.org/d3.v3.js"></script>

d3.xml("map.svg").mimeType("image/svg+xml").get(function(error, xml) {
   if (error) throw error;
   var svg = d3.select(xml.documentElement)
   .call(d3.behavior.zoom().on("zoom", function () {
       svg.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")")
   }))
   .append("g");
});

最佳答案

您实际上有两个问题:

问题 1:加载并附加外部 SVG

在您的代码中,您没有将 SVG 附加到文档中。因此,第一步实际上是附加 SVG:

d3.xml("externalSVG.svg").mimeType("image/svg+xml").get(function(error, xml) {
    if (error) throw error;
    document.body.appendChild(xml.documentElement);
    //rest of the code here
});

问题 2:添加缩放

您提供的代码是将缩放添加到 <g>元素,而不是整个 SVG。因此,无法缩放外部 SVG。为此,您可以编写如下内容:

var svg = d3.select("svg")
    .call(d3.behavior.zoom().on("zoom", function () {
        svg.selectAll("*")
        .attr("transform", "translate(" + d3.event.translate + ")" 
        + " scale(" + d3.event.scale + ")")
}))

查看演示:

d3.xml("https://boxy-svg.com/images/logos/boxy-svg.svg").mimeType("image/svg+xml").get(function(error, xml) {
  if (error) throw error;
  document.body.appendChild(xml.documentElement);
	 var svg = d3.select("svg")
   .call(d3.behavior.zoom().on("zoom", function () {
       svg.selectAll("*").attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")")
   }))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于javascript - d3 向 d3.xml 加载的元素添加缩放功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358158/

相关文章:

javascript - 将 FontAwesome 图标添加到 D3 图形

svg - 如何在SVG路径中设置每条线的颜色或宽度

javascript - 优化交互式 SVG JavaScript 动画

javascript - 如何使用 Javascript 将文件添加到现有的 dataTransfer 对象中

javascript - javascript 文件中的 Codeigniter( Controller )文件路径

javascript - 指定 select 选项的不同方式

javascript - 如何使用showModal按照 promise 完全屏蔽外部内容?

javascript - 设置图表上最后一个值的工具提示位置

javascript - 如何使图像在图像墙内反弹?

html - svg 背景图像位置始终在 Internet Explorer 中居中,尽管背景位置为 : left center;