2011-04-18 248 views
2

我正在使用下面的代碼來控制彈出式菜單。jQuery菜單懸停

var timeouts = {}; 
$(".item-wrapper").hover(function() { 
var rel = $(this).attr("rel"); 
var el = $('#' + rel + '-tip'); 
if (timeouts[rel]) clearTimeout(timeouts[rel]); 
timeouts[rel] = setTimeout(function() { el.fadeIn("fast").show(); }, 50); 
}, 
function() { 
var rel = $(this).attr("rel"); 
var el = $('#' + rel + '-tip'); 
if (timeouts[rel]) clearTimeout(timeouts[rel]); 
timeouts[rel] = setTimeout(function() { el.hide() }, 500); 
}); 

本質上講,當在其上顯示上下文提示子菜單中的項目,包裝圖標懸停發生的事情是。

但是,當您快速滾動菜單時,很多工具提示仍然可見(因爲它們需要500毫秒才能消失)。我想更改代碼,以便只顯示當前的相關工具提示。

我認爲這可以通過使用$(「。tip」)。hide()某處,但我不知道該把它放在哪裏。

任何幫助表示讚賞。

+0

我認爲,例如,如果你想隱藏命名爲「提示」的元素,你可以把它放在OnMouseLeave在(我不知道這是否是正確的,但你得到了傑斯..) - 只要做一個谷歌搜索,你會發現,它可以很簡單,只要調用某個事件發生時的函數(如當鼠標離開菜單項)。 – 2011-04-18 01:40:15

回答

0

添加班級到活動提示。顯示未來之前,讓活動類的大小,並把它隱藏

var timeouts = {}; 
$(".item-wrapper").hover(function() { 
var rel = $(this).attr("rel"); 
var el = $('#' + rel + '-tip'); 
if(!el.hasClass('active') && $('.active').size() > 0) 
    $('.active').removeClass('active').hide(); 
el.addClass('active'); 
if (timeouts[rel]) clearTimeout(timeouts[rel]); 
timeouts[rel] = setTimeout(function() { el.fadeIn("fast").show(); }, 50); 
}, 
function() { 
var rel = $(this).attr("rel"); 
var el = $('#' + rel + '-tip'); 
if (timeouts[rel]) clearTimeout(timeouts[rel]); 
timeouts[rel] = setTimeout(function() { el.hide() }, 500); 
}); 
+0

看起來不錯,但是當我應用該代碼時,沒有任何工具提示會彈出。 – Sam 2011-04-18 02:04:02

+0

可能是一些愚蠢的錯誤。你可以請小提琴嗎? – Andre 2011-04-18 02:11:10

+0

粗略示例,將鼠標懸停在黑色方塊上:http://jsfiddle.net/QTAnQ/ – Sam 2011-04-18 02:24:31