我正在使用canvas和EaselJS构建游戏,但是在onclick中执行任何操作时会出现一个问题,即删除窗口焦点,即。提示,警报,window.open。
它发生在FireFox以及我所见过的一些移动Android设备上。
我想我理解为什么会这样,但我不知道如何解决它(我不知道如何用一句话来解释,所以这个问题的标题并不完全正确)
如果我在onclick中有警报,那么
_t.container.on('click', function(e) {
alert('test');
//end
e.preventDefault();
e.nativeEvent.preventDefault();
return false; //all of these added when trying to find a work around
});
//如何重现问题
如果你单击目标,警报会触发,将鼠标移动到任意位置(尽管仍然在画布上方)按Enter键关闭警报,然后无论鼠标位于何处,直到它被移动,点击将触发相同的事件,再次提醒......
这只是移动设备上的一个问题,因为鼠标'无法移动/触摸位置更新,因此下一次点击屏幕始终会触发第二次点击,而在桌面上它只会在关闭警报后未移动鼠标时执行此操作。
我认为这是CreateJS库本身的一个问题,因为任何有关和带有警报的点击事件的例子都有这个问题。
我在想,可能有办法强制createjs将mouseposition设置为0,0
这是一个可以找到问题的例子。
http://www.ajohnstone.com/test/hackday/CreateJS-EaselJS-b262a85/tutorials/Mouse%20Interaction/
答案 0 :(得分:3)
stage.js显然存在一个错误或限制,因为当鼠标停止时鼠标中的鼠标位置不会被重新计算,但只有当鼠标移动时才能重新计算(这只能在窗口时检测到)重点突出。)
我可以通过添加以下内容来修复它:
stage._handleMouseDown = function(e) {
this._handlePointerDown(-1, e, e.pageX, e.pageY);
};
我们的想法是覆盖标准_handleMouseDown
函数,将坐标传递给_handlePointerDown
,以便重新计算位置。我认为这种改变不会影响性能(毕竟每次移动都已完成相同的计算,我们也会在点击时进行)。
更新: The fix I suggested已在库中incorporated,此错误现已消失(但有些在线演示仍使用旧版本的库)。