2012-10-10 11 views
28

Desidero utilizzare una transizione colore CSS3 per applicare un effetto colore di evidenziazione-dissolvenza (da giallo a trasparente) a nuovi elementi aggiunti al markup utilizzando JQuery.Transizione CSS3 per evidenziare i nuovi elementi creati in JQuery

CSS

#content div { 
    background-color:transparent; 
    -moz-transition:background-color 2s; 
    -webkit-transition:background-color 2s; 
    -o-transition:background-color 2s; 
    transition:background-color 2s; 
} 

#content div.new { 
    background-color:yellow; 
} 

HTML

<div id="content"></div> 
<a id="add-element" href="#">add new element</a> 

JS

$('#add-element').click(function() { 
    var newElement = $('<div class="new">new element</div>'); 
    $('#content').append(newElement); 
    newElement.removeClass('new'); 
}); 

quando clicco sul link, viene creato il nuovo elemento. La sua classe è "nuova" (colore di sfondo giallo) e viene aggiunta al codice HTML. Dovrei essere in grado di rimuovere immediatamente la "nuova" classe per attivare la transizione del colore di sfondo su trasparente (o qualsiasi altro colore). Ovviamente sto sbagliando, poiché il colore di sfondo del nuovo elemento è immediatamente mostrato come trasparente, senza effetto di transizione. So che posso farlo nell'interfaccia utente di JQuery, ma mi piacerebbe usare le transizioni CSS3.

jsfiddle qui:

http://jsfiddle.net/paulaner/fvv5q/

risposta

4

E 'un brutto hack, ma sembra funzionare. Sono sicuro che c'è un modo migliore.

$('#add-element').click(function() { 
    var newElement = $('<div class="new">new element</div>'); 
    $('#content').append(newElement); 
    setTimeout(function(){ 
     newElement.removeClass('new'); 
    },0); 
}); 

http://jsfiddle.net/fvv5q/22/

+0

Grazie. Funziona su Chrome ma sembra essere instabile e irregolare su Firefox. – Paulaner

+0

@Paulaner Andy ha la risposta giusta, e questo è ciò a cui sto pensando. Usare 1000 invece di 0 potrebbe essere migliore dato che vuoi vedere la transizione, 0 semplicemente lampeggia il colore e va via. A proposito, non vedo la transizione qui con FF15, invece è un giallo solido, non ancora supportato? @Andy, non lo considero un 'hack'. In questa particolare situazione, dovrebbe funzionare in questo modo perché jQuery esegue immediatamente removeClass dopo l'aggiunta, ed è per questo che la transizione ** dovrebbe ** non essere vista. – user1643156

+0

Grazie ragazzi. Rezigned ha appena pubblicato una soluzione pulita che funziona perfettamente per me. – Paulaner

21

Il codice è quasi perfetto. Devi solo attivare qualcosa per far funzionare la transizione. Questo può essere fatto aggiungendo 1 riga di codice al tuo script.

$('#add-element').click(function() { 
    var newElement = $('<div class="new">new element</div>'); 
    $('#content').append(newElement); 
    // trigger on focus on newly created div 
    newElement.focus(); 

    newElement.removeClass('new'); 
}); 

http://jsfiddle.net/UXfqd/

+0

Sta funzionando. Grazie mille. – Paulaner

+0

Sì, è fantastico :) – Rezigned

+0

Pulito e semplice. Sapevo che era necessario un qualche tipo di attivazione degli eventi per far funzionare la transizione. – Paulaner

29

sono stato in grado di ottenere questo a lavorare con CSS3 animazione:

@-webkit-keyframes yellow-fade { 
    0% {background: yellow;} 
    100% {background: none;} 
} 

@keyframes yellow-fade { 
    0% {background: yellow;} 
    100% {background: none;} 
} 

.highlight { 
    -webkit-animation: yellow-fade 2s ease-in 1; 
    animation: yellow-fade 2s ease-in 1; 
} 

basta applicare la classe evidenziazione nuovi elementi:

$('#add-element').click(function() { 

    var newElement = $('<div class="highlight">new element</div>'); 

    $('#content').append(newElement); 

}); 

Ho provato in IE 10, Chrome, Safari e l'ultimo FF e funziona lì. Probabilmente non funzionerà in IE 9 e sotto ...

http://jsfiddle.net/nprather/WKSrV/3/

ho ottenuto questo metodo da questo libro in Safari Books Online: http://bit.ly/11iVv4M

+4

Questo è molto meglio e non richiede un po 'di manipolazione sul lato javascript. –

+0

Ma non funziona IE10 qui sotto. –