0

vis.js 网络中是否可以有 ALT+click、CTL+SHIFT+click 等事件?如何定义和使用使用此类事件的函数?

4

2 回答 2

1

是的,虽然没有记录,但这是可能的。您要做的是获取原始的 JavaScript 事件。一旦你有了它,你就可以部署通常的技巧。

对于声明的点击事件,假设network.on('click', function(e) {...});您通过以下方式到达原始事件let oEvent = e.event.srcEvent;

然后您可以在回调中测试oEvent.shiftKey等。

这也适用于 doubleClick。请注意,对于悬停事件let oEvent = e.event;,您使用(no )访问原始 JS 事件srcEvent

如有疑问,只需在浏览器中打开 JS 控制台并探索e数据结构。

顺便说一句,我还想推荐这篇关于如何clickdoubleClickvis.js 中破译 a 的帖子,因为 adoubleClick也会触发click! 我已将其包含在以下代码段中。

概括:

/* DECLARING EVENTS */
network.on('doubleClick', function(e) {onDoubleClick(e)});
network.on('click', function(e) {onClick(e)});
network.on('hoverNode', function (e) {doOnHoverNode(e)});
network.on('blurNode', function (e) {doOnBlurNode(e)});

/* MANAGING DOUBLE VS SINGLE CLICK */
let doubleClickTime = 0;
const threshold = 200;

function onClick(e) {
  const t0 = new Date();
  if (t0 - doubleClickTime > threshold) {
    setTimeout(function () {
      if (t0 - doubleClickTime > threshold) {
        doOnClick(e);
      }
    },threshold);
  }
}

function onDoubleClick(e) {
  doubleClickTime = new Date();
  doOnDoubleClick(e)
}

/* DEFINE CALLBACKS HERE */
function doOnClick(e) {
  // fetch id of node clicked upon
  let nodeId = e.nodes[0];
  // fetch original JS event
  let jsEvent = e.event.srcEvent;
  // match modifiers
  let  shift = jsEvent.shiftKey;
  let  alt = jsEvent.altKey;
  let  meta = jsEvent.metaKey;
  // do callback
  if (meta) {
    if (shift)
      // do stuff
    else
      // do stuff
  }
}

function doOnDoubleClick(e) {
  // don't delete the following line!
  doubleClickTime = new Date();
  // the rest just like click

function doOnHoverNode(e) {
  // fetch id of node clicked upon
  let nodeId = e.nodes[0];
  // fetch original JS event
  let jsEvent = e.event;
  // the rest just like click
}

function doOnBlurNode(e) {
  // ditto doOnHoverNode
}

希望这可以帮助。

于 2018-12-14T14:15:30.277 回答
0

click在网络模块中使用 vis.js无法将键盘修饰符与事件一起使用(请参阅http://visjs.org/docs/network/#Events)。

于 2017-05-12T06:57:41.723 回答