0

我在图层上有一些可拖动的 KineticJS 图像对象,我想在“touchend”事件上执行我自己的处理程序。听起来很简单!我为每个图像对象添加了处理程序,例如:

toyKinObj.on('touchend', openBoxContactEnded);

然而,由于对象的“可拖动”属性为“真”,似乎 KineticJS 除了我自己的处理程序代码外,还调用了它的内置 _touchend() 处理程序。

我的代码执行 stage.clear() 和 e.shape.setDraggable(false) 但这些对象修改似乎会干扰内置的 _touchend() 处理程序。根据我使用的代码版本,我看到 KineticJS _handleEvent() 处理程序失败,因为事件不再存在,或者我稍后清除的图层上的图像重新出现(后者可能发生,因为我 KineticJS 是尝试重新绘制舞台/图层作为其事件处理的一部分,即使我想清除舞台)。

更复杂的是,我自己的处理程序代码似乎也在内置的 KineticJS _touchend() 处理程序代码的中间被调用,我确信这没有帮助。

所以我的问题是:我可以扩展 _touchend() 处理程序以在主 _touchend() 代码之后执行我的代码,而不是拥有自己的处理程序吗?或者以某种方式确保我的代码在 _touchend() 完成之前不会执行?即控制处理程序执行的顺序?

我可以破解 _touchend() 以在用户定义的事件完成时调度它,触发我自己的代码,或者我可以忘记 KineticJS 触摸事件并实现我自己的拖放处理程序,但我确定我只是遗漏了一些东西,还有一种更简单的方法。

4

1 回答 1

0

我认为您正在寻找的是取消事件传播,请尝试:

  shape.on('touched', function(evt) {
    evt.cancelBubble = true;
  });

更多信息:http ://www.html5canvastutorials.com/kineticjs/html5-canvas-cancel-event-bubble-propagation-with-kineticjs/

于 2013-01-10T23:10:06.893 回答