我在同一位置有两个形状,而不是相同的颜色,当我在它们上单击时,我想在两个对象上触发点击事件,而不仅仅是第一个。
这两个形状在同一容器中。
我曾尝试getObjectsUnderPoint()
下stage.on("mousemove")
,但该功能增加我的FPS(60〜32〜了,里面也有只是一个执行console.log),因此,这不是一个很好的解决方案。
我尝试了气泡,useCapture,但是我认为这不是我想要的。
我只想点击鼠标后面的所有元素。
如果有人有解决方案,请。
这里有几点:
EaselJS对象的工作类似于HTML DOM Elements。如果元素上具有鼠标处理程序,它将阻止其下面其他层次结构中的对象接收事件。这就是它的工作原理。主要区别在于,如果您没有鼠标事件,那么它们将被忽略(例如,如果您将pointerEvents
HTML元素上的设置none
为让鼠标忽略它)。
您的想法getObjectsUnderPoint
是我会建议的。在mousemove上运行任何命中测试逻辑将非常昂贵(mousemove会触发很多操作,因此,如果您enableMouseOver
在舞台上,我们可以限制典型的鼠标悬停检查)。
一些优化的方法:
确保您使用的是mode=2
你的getObjectsUnderPoint
,这将只检查与鼠标监听对象。这大大减少了检查的开销。[ docs ]
与其在您自己的mousemove事件上检查舞台,不如设置一个标记以在刻度线上检查它。这至少可以将其限制在您的股票代码FPS上。您还可以设置一个间隔,以减少检查频率。它可能会产生一点可见的滞后,但是您可能会找到一个不错的平衡点。
减少检查的内容。如果您有一个包含可点击元素的容器,则只能检查该对象的鼠标交互作用。
如果您的对象完全相同,则也可以手动触发第二个项目上的点击。
obj1.on("click", function(event) {
obj2.dispatchEvent(event);
});
我希望这些方法可以为您提供解决方案。如果您有后续问题,请告诉我。
干杯,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句