1

我正在使用画布和 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
});

//如何重现问题

如果单击目标,则触发警报,将鼠标移动到任何位置(尽管仍在画布上)按回车键关闭警报,然后无论鼠标位于何处,直到它被移动,单击都​​会触发相同的事件,并再次提醒......

这只是移动设备上的真正问题,因为“鼠标”无法移动/触摸位置更新,因此屏幕上的下一次点击总是会触发第二次点击,而在台式机上,只有在关闭鼠标后没有移动鼠标时才会这样做警报。

我认为这是 CreateJS 库本身的问题,因为任何关于单击事件和警报的示例都有这个问题。

我在想可能有一种方法可以强制 createjs 将鼠标位置设置为 0,0

这是可以找到问题的示例..

http://www.ajohnstone.com/test/hackday/CreateJS-EaselJS-b262a85/tutorials/Mouse%20Interaction/

4

1 回答 1

3

stage.js中显然存在错误或限制,因为当鼠标按下时不会重新计算舞台中的鼠标位置,而只会在鼠标移动时重新计算(只有在窗口聚焦时才能检测到)。

我可以通过添加这个来修复它:

stage._handleMouseDown = function(e) {
    this._handlePointerDown(-1, e, e.pageX, e.pageY);
};

这个想法是覆盖标准_handleMouseDown函数以将坐标传递给_handlePointerDown以便重新计算位置。我不认为这种变化会影响性能(毕竟每次移动都已经完成了相同的计算,我们也将在点击时进行)。

示范

更新: 我建议的修复程序合并到库中,此错误现已消失(但一些在线演示仍使用旧版本的库)。

于 2013-10-08T12:17:47.993 回答