Javascript d3:残疾人士;dblclick.zoom“;使用自定义缩放后返回默认行为

Javascript d3:残疾人士;dblclick.zoom“;使用自定义缩放后返回默认行为,javascript,d3.js,zooming,event-propagation,Javascript,D3.js,Zooming,Event Propagation,以下是我的建议: 我已禁用页面加载时的双击缩放行为: 通过第202行:.on(“dblclick.zoom”,null) 但是,只要您通过单击红色按钮(参见第183行和前几行)使用自定义缩放功能进行缩放,一般双击缩放行为就会恢复。如果您首先尝试通过双击进行缩放,则可以看到这一点。应禁用dblclick上的缩放。然后单击红色按钮放大。现在再次尝试双击。您应该看到,这个dblclick-to-zoom默认行为已经返回 如何在通过自定义缩放功能进行缩放后禁用双击缩放?正如Gerardo在他的评论中所

以下是我的建议:

我已禁用页面加载时的双击缩放行为:

通过第202行:
.on(“dblclick.zoom”,null)

但是,只要您通过单击红色按钮(参见第183行和前几行)使用自定义缩放功能进行缩放,一般双击缩放行为就会恢复。如果您首先尝试通过双击进行缩放,则可以看到这一点。应禁用dblclick上的缩放。然后单击红色按钮放大。现在再次尝试双击。您应该看到,这个dblclick-to-zoom默认行为已经返回


如何在通过自定义缩放功能进行缩放后禁用双击缩放?

正如Gerardo在他的评论中所指出的,您正在调用
zoomOut
功能中的缩放(以及缩放到范围功能)。这将重新应用缩放行为,因此每次调用缩放行为时都需要使用
.on(“dblclick.zoom”,null)

但是,有一种方法可以修改缩放行为本身,这样就不需要使用这一行。d3.zoom有一个过滤方法,根据提供的过滤功能过滤事件。默认筛选函数如下所示:

 function filter() {
   return !d3.event.button;
 }
(有关更多信息,请参阅)

我们可以使用它过滤掉dblclick事件,这样它们就不会触发缩放,而不必使用
选择覆盖事件。on()


这将禁用行为中的dblclick zoom事件,因此现在可以在选择时调用它,而无需担心。这是一个。

原因是您正在将缩放再次应用到
zoomRect
内部的
zoomOut
,您不需要这样做。把它拿走。
var zoom = d3.zoom()
     .filter(function() {
       return !d3.event.button && d3.event.type != "dblclick";
     })
     ....