【问题标题】:d3 contextmenu not firingd3 上下文菜单未触发
【发布时间】:2016-04-04 13:26:30
【问题描述】:

我只是将 bootstrap 和 jquery 添加到我的 d3 脚本中。它主要工作,但我注意到我不再获得右键单击/上下文菜单事件。我的设置代码如下所示:

this.svg_canvas = d3.select("#" + this.container_id)
  .append("svg")
  .attr("width", this.width)
  .attr("height", this.height)
  .on("click", this._selectNodes.bind(this))
  .on("mousedown", this._handleMouseDown.bind(this))
  .on("contextmenu", function(data, index) { graph_view._showContextMenu(data, index); })
  .call(this.zoom_behavior.bind(this))
;

值得一提的是,所有其他手势(单击、鼠标按下和缩放)似乎都可以正常工作。

关于在哪里查看或如何调试的任何想法?

【问题讨论】:

  • 只是一个疯狂的猜测;您的mousedown 代码是否有可能阻止默认的contextmenu 事件触发?
  • Doh。我被错误的调试语句愚弄了:mousedowncontextmenu 事件触发得很好。有问题的 css 阻止了上下文菜单的显示。继续前进,这里没什么可看的……

标签: javascript jquery d3.js twitter-bootstrap-3


【解决方案1】:

恐怕这不是一个真正的答案,但既然有人赞成这个问题,我有责任告诉他们我发现了什么......

我将调试语句放在我的 .on('contextmenu') 方法中,如下所示:

var svg_canvas = d3.select('#canvas-id')
  .append('svg')
  ...
  .on('contextmenu', function(d) {
      console.log('>>> contextmenu', d);
      handleContextMenu(d);
  })
  .call(zoomBehavior)
;

...我注意到它正在调用我的 handleContextMenu(),但我的菜单没有出现。我花了一段时间才意识到我已经注释掉了生成菜单的 HTML,但之后修复很容易。

让我感到困惑的是 d3 并没有在这一行引发错误:

var context_menu = d3.select('#context-menu')
    .on('mouseup', ...)

...即使 DOM 中没有 #context-menu id。

【讨论】:

  • 你基本上写了 - 对于匹配 select 的元素运行 on 方法。没有匹配不是错误,只是无操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多