0

いくつかの div 要素に「mousemove」イベントを割り当てました。これらの要素は、アニメーション プロセスにより互いに重なり合う可能性があるため、重なっている部分にマウスを移動すると、複数の「mousemove」イベントが一度に呼び出される可能性があります。

問題は、2 つのトリガーされた「mousemove」イベントが競合する決定につながる可能性があることです。したがって、「mousemove」イベントに関連するすべての要素に基づいて決定を下したいと思います。そのようなイベントが少なくとも 1 つ発生した場合です。

私の質問は次のとおりです。それを行う効率的な方法を知っていますか?

ありがとう !

4

1 に答える 1

0

私がqを正しく理解していれば、各divのmousemoveイベントの実行を同期したいと考えています。これを行うハックな方法はいくつかありますが、HTML マークアップを変更して、重複がないようにするのが最善の方法です。

とにかく、あなたの場合、次のことができます:

var g_focusDivId = "";

function onMouseMove(e)
{
    if (g_focusDivId != "" && g_focusDivId != e.target.id)
         return; // Deciding to not exec any other mouse moves

    g_focusDivId = e.target.id;

    // Do your stuff

    g_focusDivId = "";
}

もちろん、これは JS イベント処理がシングルスレッドであることを前提としていますが、これは常に正しいとは限りません。JavaScript はシングルスレッドであることが保証されていますか?

別の方法はこれを行うことです(私はこれを試していません)。キューを使用して、単一のメソッドでイベントを順番に実行しています。はるかに制御されますが、一部のイベントの処理が遅くなる可能性があります。

var g_syncEventQueue = new Array();

function onMouseEvent(e)
{
    g_syncEventQueue.push(e);
}

function queueListenerProc()
{
    if (g_syncEventQueue.size() > 0)
    {
       var evt = g_syncEventQueue[0];
       g_syncEventQueue = g_syncEventQueue.splice(0, 1);
       return queueListenerProc(); // Immediately process the next event
    }

    setTimeout("queueListenerProc()", 1000);
}

queueListenerProc(); // Not ideal because it keeps running without an exit condition.
于 2013-08-28T01:27:38.693 に答える