我正在我的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
的解决方法,但是这个看起来并不理想。
答案 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();
});