2012-03-02 51 views
0

讓我們來看看我有一個附加到圖像的事件處理函數,例如,一個onmouseover處理函數。如果某個特定元素觸發了onmouseover事件,我不希望此處理程序運行。檢查是否有另一個事件是從事件處理函數中觸發的

更具體地說,我有一個圖像被徘徊,彈出一個菜單。如果鼠標移出該圖像,我想關閉該菜單,除非我將鼠標移動到與圖像相鄰的菜單上。

因此,像這樣的僞代碼

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

所以,我怎麼能檢查是否有另一個事件被觸發?

+0

你不得不跟蹤它自己,將由你有超過在事件處理程序的調用順序脆弱的控制變得複雜。 – Pointy 2012-03-02 00:31:49

回答

0

我會添加一個超時和一個mouseover處理程序,在其他處理程序中清除它。雖然這些元素可以直觀地彼此相鄰,但添加一個小型計時器更安全,因爲可能只有一個小小的1px區域,其中鼠標事件觸發,導致難看的閃爍。

這也允許快速mouseshake沒有閃爍。

喜歡的東西:

var timer; 

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

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

function closemenu() { 
    // close it 
} 
相關問題