Javascript Cytoscape.js-检测是否在boxend上选择了任何节点
我正在订阅cytoscape实例上正确触发的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'); } })
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();
});
谢谢你的回复。我相信这个解决方案有点类似于我的解决方案建议,但是使用了去盎司和集合,而不是标志。我希望每一次选择只能触发一次事件,但现在我会将其标记为已接受。