首页 > 解决方案 > 有没有办法确定事件是否由用户操作发起?

问题描述

const cyEvents = 'move select drag unselect viewport';

cy.on(cyEvents, (e) => {
  // e.type is 'viewport' on graph render
});

使用上面的代码,当图形呈现时,内部事件处理程序会立即触发,即使用户根本没有与图形交互。

有没有办法阻止这个事件触发,或者最好有办法告诉事件的来源,例如 Cytoscape 是否导致事件以编程方式触发,或者它是由用户与图形交互引起的(鼠标事件, ETC。)?

标签: cytoscape.js

解决方案


如果这对您有用,您可以为每种类型的事件设置一个侦听器。

cy.on('tap', 'node', function(evt){
  let node = evt.target;
  console.log( 'tapped ' + node.id() );
});

这已经在文档中提到。另外,不要忘记删除你的听众cy.off(。如果您多次添加侦听器,它们将被多次调用。

--- 编辑 1 --- 再次在文档中,它说

https://js.cytoscape.org/#events

因此,在事件处理函数中,您可以检查这些参数是否存在。另外,我认为您的问题尚不清楚。也许你可以准备一个最小的可重复样本。

此外,如果您想将图表标记为脏,您可以简单地侦听仅由直接用户交互触发的事件。什么时候被解雇,你可以设置你的标记。


推荐阅读