2013-11-02 13 views
8

Ho un problema con questo codice jQuery:JQuery hover ciclo

$(".item").mouseenter(function(){ 
    $(this).addClass("active"); 
    $(this).removeClass("item"); 
    $(".item").hide(700); 
}).mouseleave(function(){ 
    $(this).stop(); 
    $(this).addClass("item"); 
    $(this).removeClass("active"); 
    $(".item").show(700); 
}); 

e questo è il mio HTML:

<ul> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
</ul> 

che voglio quando faccio hover su un elemento, altri punti siano nascondere, il codice funziona bene ma il problema è lì se metto il mouse su un altro oggetto nella durata del nascondiglio (700 ms), creerà un loop di elementi hide/show. cosa posso fare per impedirlo.

jsFiddle

nota: voglio l'oggetto è passato il mouse va a sinistra, non rimanere fisso.

+0

cattivo concetto di interfaccia utente, semplicemente perché non si può evitare in bilico un altro a causa di carri allegorici. Mentre si animano, cambiano posizione. Che l'animazione di opacità funziona per te? – charlietfl

risposta

3

Si stava utilizzando float: left agli li elementi .. quindi la ul era senza larghezza e altezza. Applicare questo CSS:

ul { 
    overflow: auto; 
} 

e anche ho fatto alcuni cambiamenti nel jQuery:

$(".item").on('mouseenter', mEnter) 
$('ul').on('mouseleave', function() { 
    $('.item').stop(); 
    $('.active').removeClass("active") 
     .addClass("item"); 
    $(".item").show(700); 
}); 

function mEnter() { 
    $(this).addClass("active"); 
    $(this).removeClass("item"); 
    $(".item").hide(700); 
} 

si stava applicando mouseleave evento per l'individuo aleggiava LI elemento al posto dell'elemento genitore cioè UL.

Working Fiddle

+0

Ben fatto ... questo sembra funzionare proprio come l'OP intende. – Charlie74

+0

btw, non è necessario il wrapping in una funzione .. L'ho appena fatto durante il test. –

+0

perfetto e grazie amico ... –