我正在正确触发的scapescape实例上订阅boxend事件,但是我希望能够确定事件触发时框内是否有任何节点。看来,事件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的解决方法,但这似乎并不理想。

最佳答案

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

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();
});

关于javascript - Cytoscape.js-检测是否在Boxend上选择了任何节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46076684/

10-12 12:46