2011-11-29 14 views
8

Ho un div con un id di "pulsante". Sto cercando di cambiare lo sfondo per diventare blu quando passo il mouse (senza usare il selettore hover CSS).Javascript addEventListener - si usa per creare un effetto mouseover?

var item = document.getElementById("button"); 
item.addEventListener("mouseover", func, false); 

function func() 
{ 
    var item = document.getElementById("button"); 
    item.setAttribute("style", "background-color:blue;") 
} 

Questo, tuttavia, imposta solo il colore della voce di blu quando mi passa il mouse, ma non si resetta al bianco dopo mi muovo mouse. Come posso correggere questo? (btw, mouseenter e mouseleave non funzionano con questo apparentemente).

risposta

13

Sarà necessario impostare un evento simile per gestire mouseout. All'interno della funzione evento mouseout, puoi cambiare il colore al colore originale.

var item = document.getElementById("button"); 
item.addEventListener("mouseover", func, false); 
item.addEventListener("mouseout", func1, false); 

function func() 
{ // not needed since item is already global, 
    // I am assuming this is here just because it's sample code? 
    // var item = document.getElementById("button"); 
    item.setAttribute("style", "background-color:blue;") 
} 

function func1() 
{ 
    item.setAttribute("style", "background-color:green;") 
} 
+0

Ahh ... fantastico! Ho un'immagine all'interno del mio div e considera questo come "fuori", un modo per mascherarlo così che pensi ancora che sia all'interno della scatola? – antonpug

+0

Sì, gli eventi mouseover e mouseout catturano tutti gli eventi anche dai bambini (e sono in bolla). Nelle tue funzioni, dovrai confrontare la proprietà relatedTarget (W3C) o ToTarget/fromTarget (IE) sul parametro dell'evento. Dai un'occhiata a questo link per maggiori informazioni: http://www.quirksmode.org/js/events_mouse.html#relatedtarget – AndrewR

+0

È molto lavoro catturare solo il contenitore genitore e non gestire nulla dagli elementi figlio. A meno che tu non abbia una ragione specifica per non farlo, puoi semplificare il tuo codice usando la funzione 'hover()' di jQuery. – AndrewR

1

Hai provato mouseout?

(Sfortunatamente l'evento "mouseover" è stato chiamato male - sarebbe stato meglio se fosse stato chiamato "mousein" in modo che fosse più ovviamente e intuitivamente l'opposto di "mouseout". Ma questo è solo uno dei tanti eventi incoerenti.)

Penso che mouseenter e mouseleave siano cose che altri browser potrebbero non supportare, anche se penso che jQuery supporti anche quegli eventi.

+0

mouseout funziona ... ma c'è anche qualcosa come mousein? mousein non funziona – antonpug

+0

No, no, non c'è "mousein". I due eventi sono sicuramente "mouseover" e "mouseout". Quello che intendevo era che l'evento "mouseover" esistente avrebbe dovuto essere chiamato "mousein" in modo che fosse un opposto più ovvio di "mouseout". Ma non lo era. Ho modificato la mia risposta per cercare di renderla un po 'più chiara. – nnnnnn

Problemi correlati