EaselJS onclick接管整个画布

时间:2013-10-08 11:21:08

标签: javascript canvas easeljs

我正在使用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/

1 个答案:

答案 0 :(得分:3)

stage.js显然存在一个错误或限制,因为当鼠标停止时鼠标中的鼠标位置不会被重新计算,但只有当鼠标移动时才能重新计算(这只能在窗口时检测到)重点突出。)

我可以通过添加以下内容来修复它:

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

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

Demonstration

更新: The fix I suggested已在库中incorporated,此错误现已消失(但有些在线演示仍使用旧版本的库)。