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

Javascript Cytoscape.js-检测是否在boxend上选择了任何节点,javascript,cytoscape.js,Javascript,Cytoscape.js,我正在订阅cytoscape实例上正确触发的boxend事件,但我希望能够确定触发事件时框内是否有任何节点。事件target属性似乎只是cytoscape实例,而不是所选的元素 这是我希望做的事情 this.cy.on('boxend', event => { if (event.nodesSelected()) { // fire off some action } else { console.log('no nodes selected'); } })

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

这是我希望做的事情

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

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

});

我可以想到一种解决方法,使用
框start
设置一个标志
nodeselected=false
,然后在
框中设置
nodeselected=true
框select
事件,但这似乎并不理想。

如果你想了解整个手势流程,还需要听
框。从文档中:

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

一般来说,对于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();
});

谢谢你的回复。我相信这个解决方案有点类似于我的解决方案建议,但是使用了去盎司和集合,而不是标志。我希望每一次选择只能触发一次事件,但现在我会将其标记为已接受。