2012-03-02 5 views
0

イメージに私はイベントハンドラ関数(例えば、onmouseoverハンドラ)が添付されています。 onmouseoverイベントが特定の要素によって起動された場合、このハンドラを実行したくありません。イベントハンドラ関数から別のイベントが発生していないか確認してください。

より具体的には、私は吊るされた画像を持っており、メニューがポップアウトされています。イメージに隣接するメニューにマウスを移動しない限り、マウスがそのイメージから移動すると、そのメニューを閉じます。

ので、擬似コードでこのような何か

img.mouseout = function() { 
if (otherelement.onmouseover.fired) { 
leave the menu as it is 
} 
else 
{ 
close the menu 
} 

それでは、どのように私は別のイベントが発生したかどうかを確認することができますか?

+0

あなたはそれを自分自身を追跡するために必要があるだろう、それはあなたがイベントハンドラが呼び出される順序の上に持って希薄な制御によって複雑になります。 – Pointy

答えて

0

タイムアウトと他のハンドラでクリアするmouseoverハンドラを追加します。要素は視覚的に正確に隣り合っているかもしれませんが、小さなタイマーを追加する方が安全です。なぜなら、マウス出力イベントが発生する1pxの小さな領域があり、醜いちらつきを引き起こすからです。

これにより、フリッカーのない簡単なマウスシェイクも可能です。以下のような

何か:

var timer; 

img.onmouseout = other.onmouseout = function() { 
    timer = setTimeout(closemenu, 100); 
} 

img.onmouseover = other.onmouseover = function() { 
    clearTimeout(timer); 
} 

function closemenu() { 
    // close it 
} 
関連する問題