Как использовать модификаторы с событием click в vis.js?

Можно ли в сети vis.js иметь события ALT+ щелчок, CTL+SHIFT+ щелчок и т. Д.? Как функции, использующие такие события, могут быть определены и использованы?

1 ответ

Решение

Нельзя использовать клавиатурные модификаторы с click события с использованием vis.js в сетевом модуле (см. http://visjs.org/docs/network/).

Да, это возможно, хотя и не документировано. Что вам нужно сделать, это получить исходное событие JavaScript. Когда у вас есть это, вы можете использовать обычные приемы.

Для события щелчка, как объявлено, скажем, network.on('click', function(e) {...}); Вы достигаете оригинального события с let oEvent = e.event.srcEvent;

Тогда вы можете проверить oEvent.shiftKey и т. д. в рамках обратного вызова.

Это работает также для DoubleClick. Обратите внимание, что для событий наведения вы получаете доступ к исходному событию JS с помощью let oEvent = e.event; (нет srcEvent).

В случае сомнений просто откройте консоль JS в своем браузере и изучите e структура данных.

Кстати, я также хотел бы рекомендовать этот пост о том, как расшифровать click из doubleClick в vis.js, как doubleClick также вызывает 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
}

Надеюсь это поможет.

Другие вопросы по тегам