javascript - d3 单击时放大 svg,下次双击时缩小

标签 javascript jquery d3.js svg

我正在使用 d3 放大 svg 元素。

目前,它的设置方式是您可以滚动并远离图像。我只希望能够放大图像。我尝试将其设置为双击时它会放大一次,如果再次双击它会缩小,所以应该只有两种状态。

为了防止 mousehweel,我尝试过:

svg.call(zoom).on("mousewheel.zoom", null);

我搜索了很多博客和教程,但找不到任何可以回答这个问题的内容。

参见下面的代码:

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>

最佳答案

回答有关限制的问题:只需将比例范围设置为最大值1即可。

.scaleExtent([1, 10])

这是演示:

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().scaleExtent([1, 10]).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 单击时放大 svg,下次双击时缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40360978/

相关文章:

javascript - Angular 2.0 Beta - 访问 DOM 适配器 - BrowserDomAdapter

javascript - 获取文本区域的长度

javascript - 在表格内分隔 D3 饼图

javascript - Jquery - 在滚动到 50% 时将 DIV 旋转 X 度

javascript - 谷歌分析代码不起作用

jquery 自动完成查询

javascript - 访问 $(document).ready() 和 jquery 之外的变量

javascript - 在窗口调整大小时动态更改类

javascript - d3.js 从对象中的值创建堆积条形图

svg - 如何附加带有内联 tspan 子项的文本元素?