【发布时间】:2020-10-18 02:05:55
【问题描述】:
我正在使用 d3.js V 4.0 在 SVG 中提供缩放和平移功能。我正在实现一个重置按钮,让我回到图像的中心。它正在工作,但它使用默认的 d3.interpolateZoom ,因此图像在过渡期间会缩小。我只希望缩放进行标准插值,但我不知道如何更改缩放行为的插值器。 这是代码的缩写版本:
var map = document.querySelector('#map');
var everything = d3.select('#everything');
var zoomBehavior = d3.zoom();
zoomBehavior.scaleExtent([0.5, 10])
.on('zoom', zoomed);
d3.select(map).call(zoomBehavior);
function zoomed() {
everything.attr('transform', d3.event.transform);
}
function reset() {
d3.select(this.map)
.transition()
.duration(1000)
.call(zoomBehavior.transform, d3.zoomIdentity);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.1.0/d3.min.js"></script>
<svg id="map" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g id="everything">
<circle r="5" cx="50" cy="15"></circle>
</g>
</svg>
<button onclick="reset()">reset</button>
不幸的是,这并没有表现出我所看到的行为。 (在我的真实版本中,比例 k 使用 van Wijk smooth zooming 通过 0 进行插值)但问题仍然有效。如果我要更改此缩放行为的插值器,我将如何以及在哪里执行此操作?我曾尝试调用文档似乎建议的 zoomBehavior.interpolate(d3.interpolate),但我收到一条错误消息,指出 zoomBehavior.interpolate 不是函数。
【问题讨论】:
标签: javascript d3.js