javascript - d3 : disabled "dblclick.zoom" default behaviour returns after using custom zoom

标签 javascript d3.js zooming event-propagation

遵循此处的建议:How to disable double click zoom for d3.behavior.zoom?

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

https://bl.ocks.org/interwebjill/55f1c93864afa661524fb7c63ddd2d70

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

但是,一旦您使用自定义缩放功能通过单击红色按钮进行缩放(请参见第 183 行及以后),一般的双击缩放行为就会恢复。如果您第一次尝试通过双击进行缩放,您可以看到这一点。应禁用 dblclick 缩放。然后单击红色按钮进行放大。现在再次尝试双击。您应该看到此 dblclick 缩放默认行为已返回。

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

最佳答案

正如 Gerardo 在他的评论中指出的那样,您正在调用 zoomOut 函数中的缩放(以及缩放到范围函数)。这会重新应用缩放行为,因此您每次调用缩放行为时都需要使用 .on("dblclick.zoom",null)

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

 function filter() {
   return !d3.event.button;
 }

(有关更多信息,请参阅 docs)

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

var zoom = d3.zoom()
     .filter(function() {
       return !d3.event.button && d3.event.type != "dblclick";
     })
     .... 

这会禁用行为中的 dblclick 缩放事件,因此您现在可以在选择上调用它而不必担心。这是 updated block .

关于javascript - d3 : disabled "dblclick.zoom" default behaviour returns after using custom zoom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104432/

相关文章:

php - 如何让 PHP AJAX 错误显示在我的 jQuery 代码中?

javascript - 在 JavaScript 的 li 中按时间顺序对 li 重新排序

javascript - renderRoutes 和 <Switch> 上的 location 属性

javascript - Angular 2自定义复合控件

javascript - 我如何选择所有节点并对所有节点应用 css 样式,D3

html - 在 Canvas (和 img)上使用带有 CSS 缩放的最近邻

javascript - d3 淡化未连接节点的图标

javascript - 鼠标悬停时堆栈图中的淡入淡出栏

javascript - D3 添加缩放和平移到 map

php - 使用 ffmpeg 从具有 ken burns 效果的图像生成视频