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
});

//問題を再現する方法

ターゲットをクリックすると、アラートが発生し、マウスをどこにでも移動します (まだキャンバス上にあります) Enter キーを押してアラートを閉じます。次に、マウスの位置に関係なく、移動するまで、クリックすると同じイベントが発生します。 、そして再びアラート....

これは実際にはモバイル デバイスでのみ問題になります。「マウス」を移動/タッチ位置を更新できないため、次に画面をタップすると常に 2 番目の onclick が発生しますが、デスクトップでは、アラート。

これは CreateJS ライブラリ自体の問題だと思います。これは、クリック イベントとアラートの例にこの問題があるためです。

createjs に強制的に mouseposition を 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 に答える