Cytoscape.js - 检测是否在boxend上选择了任何节点

时间:2017-09-06 13:33:35

标签: javascript cytoscape.js

我正在我的cytoscape实例上订阅正确触发的boxend事件,但我希望能够在事件触发时确定是否有任何节点在框内。看来Event target属性只是cytoscape实例,而不是被选中的元素。

这是我希望做的事情。

this.cy.on('boxend', event => {

  if (event.nodesSelected()) {
    // fire off some action
  } else {
    console.log('no nodes selected');
  }

});

我可以考虑使用boxstart设置标记nodesSelected = false然后在nodesSelected = true / box事件上设置boxselect的解决方法,但是这个看起来并不理想。

1 个答案:

答案 0 :(得分:1)

如果您想了解整个手势流,还需要听box。来自文档:

框:在boxend框内的元素上触发

http://js.cytoscape.org/#events/user-input-device-events

通常,对于UI,只需对box等事件进行去抖即可。

let boxedNodes = cy.collection();

let handleElements = debounce(function(){
  // ...

  boxedNodes = cy.collection();
});

cy.on('box', function( e ){
  let node = e.target;

  boxedNodes = boxedNodes.union( node );

  handleElements();
});