我正在使用 canvas 和 EaselJS 构建游戏,但是在 onclick 内执行任何删除窗口焦点的操作时会出现问题,即。提示、警报、窗口打开。
据我所知,它发生在 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 键关闭警报,然后无论鼠标位于何处,直到移动为止,单击都会触发相同的事件,并再次提醒......
这仅在移动设备上才是真正的问题,因为“鼠标”无法移动/触摸位置更新,因此屏幕上的下一次点击总是会触发第二次 onclick,而在桌面上,只有在关闭鼠标后没有移动鼠标时才会这样做。警报。
我认为这是 CreateJS 库本身的问题,因为任何有关单击事件和警报的示例都存在此问题。
我在想可能有一种方法可以强制createjs将mouseposition设置为0,0
这是一个可以找到问题的示例..
http://www.ajohnstone.com/test/hackday/CreateJS-EaselJS-b262a85/tutorials/Mouse%20Interaction/
显然存在错误或限制stage.js由于事实上,当鼠标按下时,舞台中的鼠标位置不会重新计算,而是仅在鼠标移动时重新计算(只有在窗口聚焦时才能检测到)。
我可以通过添加以下内容来修复它:
stage._handleMouseDown = function(e) {
this._handlePointerDown(-1, e, e.pageX, e.pageY);
};
这个想法是超越标准_handleMouseDown
将坐标传递给的函数_handlePointerDown
以便重新计算位置。我不认为这种变化会影响性能(毕竟每个移动都已经完成了相同的计算,我们也将在单击时进行计算)。
示范
Update: 我建议的修复已经合并在库中,这个错误现在已经消失了(但一些在线演示仍然使用旧版本的库)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)