In una libreria che sto utilizzando, ho il compito di spostare un elemento nella parte anteriore della dom quando viene spostato sopra. (Lo ingrandisco, quindi ho bisogno di vederlo, quindi rimpicciolirlo quando tocchi).Spostare l'elemento attivo perde l'evento di mouseout in Internet Explorer
La libreria che sto utilizzando ha una soluzione pulita che utilizza appendChildren sull'elemento attivo per spostarlo alla fine del suo padre in modo più verso la fine del dom e, a sua volta in alto.
Il problema è che, poiché l'elemento che si sta spostando è quello che si sta passando sopra l'evento mouseout, viene perso. Il tuo mouse è ancora sul nodo ma l'evento mouseout non viene sparato.
Ho spogliato la funzionalità per confermare il problema. Funziona bene in Firefox ma non in qualsiasi versione di IE. Sto usando jquery qui per la velocità. Le soluzioni possono essere in chiaro javascript vecchio ... che sarebbe una preferenza in quanto potrebbe essere necessario tornare al flusso.
Non riesco a utilizzare z-index qui poiché gli elementi sono vml, la libreria è Raphael e sto utilizzando la chiamata toFront. Esempio utilizzando ul/li per mostrare problema in un semplice esempio
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="js/jquery.min.js" type="text/javascript"></script>
<style>
li
{
border:1px solid black;
}
</style>
</head>
<body>
<ul><li>Test 1</li></ul>
<ul><li>Test 2</li></ul>
<ul><li>Test 3</li></ul>
<ul><li>Test 4</li></ul>
<script>
$(function(){
$("li").mouseover(function(){
$(this).css("border-color","red");
this.parentNode.appendChild(this);
});
$("li").mouseout(function(){
$(this).css("border-color","black");
});
});
</script>
</body>
</html>
Edit: Ecco un link ad un bidone pasta js per vederlo in azione. http://jsbin.com/obesa4
** Modifica 2: ** Vedi tutti i commenti su tutte le risposte prima di postare molte più informazioni in questo.
Non riesco a dare un senso al tuo post. vuoi che l'evento 'mouseout' si attivi mentre il tuo mouse è ancora sopra l'elemento? qual è la tua domanda attuale? – lincolnk
E per this.parentNode.appendChild (this); stai cercando di aggiungere nuovamente l'elemento LI esistente? Perché non aggiungere semplicemente una classe CSS anziché aggiungere/rimuovere lo stesso elemento con il nuovo CSS? O il tuo codice originale prevede l'aggiunta di un elemento completamente nuovo da qualche altra parte all'interno dell'UL per imitare il tuo effetto "espanso" di dimensioni che hai menzionato all'inizio? – Gary
Linkol Sto cercando di far funzionare il codice di esempio, ad esempio come fa in firefox. L'evento mouseout non si attiva. Sto usando gli elementi li come esempio. Come ho detto nel mio post, gli elementi sono in realtà elementi VML. Quindi cose come z-index o l'aggiunta di classi non funzioneranno, a meno che le persone non si dimostrino diverse. – johnwards