javascript - d3-annotation + d3-zoom - 缩放而不缩放

标签 javascript d3.js

我是 d3 的新手。我一直在到处寻找如何做到这一点的例子。但本质上,我在 svg 上创建了一堆 d3-annotations,指向各种 x,y 坐标。我的项目是一个映射项目,所以我创建了一个缩放功能:

d3
.zoom()
.scaleExtent([1, 100])
.on('zoom', event => {
    g1.attr('transform', event.transform);
})
这对于放大 map 和我分别添加到 map 中的圆圈非常有用。然而,注释也变得同样大。我如何“转换”或“缩放” map /组 (g),以便注释继续指向正确的位置,但渲染的注释也不会因此变得很大。

最佳答案

缩放时,对 g1 组应用变换。在 <g> 上应用变换将缩放其中的所有元素。一种可能的设计是有两组,一组受缩放影响(代码中的 g1),另一组不受缩放影响:

<svg>
<g class="zoomable">
 <!-- the rest, zoomable -->
</g>
<g class="not-zoomable">
 <!-- annotations -->
</g>
然后,在您的代码中,将注释放在 not-zoomable 中组,并让缩放变换 zoomable仅限组:
let zoomableGroup = d3.select(".zoomable")
d3
 .zoom()
 .scaleExtent([1, 100])
 .on('zoom', event => {
    zoomableGroup.attr('transform', event.transform);
 })

关于javascript - d3-annotation + d3-zoom - 缩放而不缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65510740/

相关文章:

javascript - d3.csv promise 挂起并获取其数据

javascript - D3 circle pack - 向节点添加标签

javascript - Ajax - 返回的 json 对象在 ie 中为空

javascript - 如何从 Map 对象获取嵌套值?

javascript - 滚动 div 时触发速度动画

javascript - 使用 D3.js 加载外部

javascript - 使用 NVD3.js 构建有焦点的折线图。为什么我的焦点栏坏了

javascript - php:在服务器端事件上推送新数据

javascript - 尝试将屏幕锁定为纵向。英特尔 XDK 3922

javascript - 绘图 svg :circle on d3. svg.area().interpolate ("basis")