D3.js 使用矩形选择可缩放贴图顶部的节点。在D3中

D3.js 使用矩形选择可缩放贴图顶部的节点。在D3中,d3.js,zooming,geo,D3.js,Zooming,Geo,[[这是使用D3V5]] D3.zoom()自动将滚轮和鼠标单击映射到缩放地图的操作。我希望能够在地图区域中绘制一个矩形,以选择出现在地图顶部的节点。我需要知道如何为mousedown、mousemove、mouseup添加处理程序,以便跟踪矩形的位置 我尝试了以下方法,但从未调用mousedown回调 如果我删除.call(zoom),则会调用mousedown回调,但e是未定义的。我可以使用d3.event访问事件,因此这不是问题 如果在(mouse*',cb)`调用.call(zoom)之

[[这是使用D3V5]]

D3.zoom()自动将滚轮和鼠标单击映射到缩放地图的操作。我希望能够在地图区域中绘制一个矩形,以选择出现在地图顶部的节点。我需要知道如何为mousedown、mousemove、mouseup添加处理程序,以便跟踪矩形的位置

我尝试了以下方法,但从未调用mousedown回调

如果我删除
.call(zoom)
,则会调用mousedown回调,但
e
未定义的
。我可以使用d3.event访问事件,因此这不是问题

如果在(mouse*',cb)`调用
.call(zoom)
之后移动
.call(zoom)
,我会看到鼠标向下移动,但没有鼠标,只有一个鼠标移动

我可以理解先添加鼠标回调,但我不明白为什么其中一些是屏蔽的,而另一些不是。 显然,我需要一些帮助来理解这一点

        var zoom = d3.zoom()
            .scaleExtent([0.1, 10])
            .filter(() => !d3.event.ctrlKey) // Don't zoom/pan when ctrl is pressed
            .on("zoom", zoomed)
        ;

        container
            .call(zoom)
            .on('mousedown.zoomrect', e=>console.log('zoom', e))
            .on('mouseup.zoomrect', e=>console.log('zoom up', e))
            .on('mousemove.zoomrect', e=>console.log('zoom move', e))
        ; 
在矩形中定位节点是一个单独的问题,但我相信我可以处理投影和变换