【问题标题】:Add onRightClick to JavaScript lib Hypertree将 onRightClick 添加到 JavaScript lib Hypertree
【发布时间】:2013-05-04 10:13:12
【问题描述】:

我目前正在一个 Hypertree 图上工作(一个 repo 是 here),我想从 JavaScript InfoVis Toolkit 使用它。问题如下:我在Hypertree中添加了具体的事件,分别是onClick和onRightClick。

 Events: {
          enable: true,
          onClick: function(node, eventInfo, e) {
              ht.controller.onComplete();
          },
          onRightClick: function(node, eventInfo, e) {
              ht.controller.onComplete();
          },
      },

然后我简单地将 veent 处理程序附加到 Hypertree 标签上,只需稍微修改 demo-code:

//Attach event handlers and add text to the
  //labels. This method is only triggered on label
  //creation
  onCreateLabel: function(domElement, node){
      domElement.innerHTML = node.name;

      $jit.util.addEvent(domElement, 'click', function () {
          ht.onRightClick(node.id, {
              onComplete: function() {
                  ht.controller.onComplete();
              }
          });
      });


      $jit.util.addEvent(domElement, 'rclick', function () {
          ht.onClick(node.id, {
              onComplete: function() {
                  ht.controller.onComplete();
              }
          });
      });
  },

这很简单。 Hypertree 事件的文档位于Options.Events.js。现在我加载页面......我有left.clicks。但是没有右键单击...我希望 RightClicks 移动图形,并希望 onClicks 从 DOM Element 节点打开一个链接。有人可以在这里给我指点吗?

最好, 马吕斯

【问题讨论】:

  • 嗨,您找到解决此问题的方法了吗?我遇到了同样的问题
  • 希望我有点困惑,您希望右键单击移动图形意味着当您单击右键时图形将移动,就像当前在左键单击中发生的一样?
  • 节点是链接。所以它们应该在正常点击时打开。并且左键可以移动图表。
  • 不确定您是否在其他地方进行了扩展,但您是否绑定到某个地方的oncontextmenu?

标签: javascript onclick infovis


【解决方案1】:

$jit.util.addEvent(obj, type, fn) 是 obj.addEventListener(type, fn, false) 的快捷方式。所以你试图绑定到'onrclick'事件。但是javascript中没有这样的事件。为了检测右键单击,您只需将“rclick”替换为“mouseup”,并在回调中检查按钮是否正确。代码如下:

$jit.util.addEvent(domElement, 'mouseup', function (event) {
   // detecting right button
   if (event.button != 2) {
       return;
   }
   ht.onClick(node.id, {
       onComplete: function() {
           ht.controller.onComplete();
       }
   });
});

此外,您不需要为此目的使用 Options.Events.js,因此您可以删除该代码

【讨论】:

    【解决方案2】:

    我在“事件”部分看到的唯一错误是 onRightClick 后面的尾随逗号。如果您使用 IE>8,它确实不应该影响代码,但值得一试。

    【讨论】:

      【解决方案3】:

      好的,这就是为什么我认为您的解决方案不起作用的答案。

      $jit.util.addEvent(domElement, 'rclick', function ()
      

      没有像 'rclick' 这样的 jquery 事件。

      通常使用 jquery,您将使用以下代码 detect a right-click:

      $('#element').mousedown(function(event) {
       if (event.which === 3) { 
        alert('Right mouse button pressed');
       }
      });
      

      因此,在您的示例中,您将使用“mousedown”而不是“rclick”。但是,查看addEvent 的文档:

      $jit.util.addEvent(elem, 'click', function(){ alert('hello'); });
      

      这个例子似乎暗示了事件对象不能传递给addEvent的函数参数,这意味着它不可能检测到鼠标右键被点击了。

      可能值得将您的问题直接发布给 InfoVis 的作者,因为我也有兴趣看看是否可以连接鼠标右键。

      【讨论】:

      • 呸,这么近!谁读了我的答案,并且对事件对象有了新的了解,答案就在盘子上。哦,好吧:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多