2012-10-10 23 views
28

Quiero utilizar una transición de color CSS3 para aplicar un efecto de color de desvanecimiento de resaltado (amarillo a transparente) a los nuevos elementos añadidos al marcado usando JQuery.CSS3 Transición para resaltar los elementos nuevos creados en 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'); 
}); 

Cuando pulso en el enlace, se crea el nuevo elemento. Su clase es "nueva" (color de fondo amarillo) y se agrega al marcado HTML. Debería poder eliminar inmediatamente la clase "nueva" para activar la transición de color de fondo a transparente (o cualquier otro color). Obviamente lo estoy haciendo mal, ya que el color de fondo del nuevo elemento se muestra inmediatamente como transparente, sin efecto de transición. Sé que puedo hacer esto en la interfaz de usuario de JQuery, pero me gustaría usar las transiciones CSS3.

jsFiddle aquí:

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

Respuesta

4

Es un truco feo, pero parece que funciona. Estoy seguro de que hay una mejor manera.

$('#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

Gracias. Está funcionando en Chrome, pero parece ser inestable y errático en Firefox. – Paulaner

+0

@Paulaner Andy tiene la respuesta correcta, y esto es en lo que estoy pensando. Usar 1000 en lugar de 0 podría ser mejor ya que desea ver la transición, 0 solo parpadeará y desaparecerá. Por cierto, no veo la transición aquí con FF15, en cambio, es un amarillo sólido, no compatible todavía? @Andy, no lo considero un 'hack'. En esta situación particular, debería funcionar de esta manera porque jQuery ejecutó inmediatamente removeClass después de anexar, y es por eso que la transición ** should ** no se debe ver. – user1643156

+0

Gracias chicos. Rezigned acaba de publicar una solución limpia que funciona perfectamente para mí. – Paulaner

21

su código es casi perfecta. Solo tienes que activar algo para que la transición funcione. Esto se puede hacer agregando 1 línea de código a su secuencia de comandos.

$('#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

Está funcionando. Muchas gracias. – Paulaner

+0

Sí, eso es genial :) – Rezigned

+0

Limpio y simple. Sabía que era necesario algún tipo de desencadenante de eventos para que la transición funcionara. – Paulaner

29

que era capaz de conseguir esto para trabajar con la animación CSS3:

@-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; 
} 

sólo se aplica a la clase más destacado de nuevos elementos:

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

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

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

}); 

Probé en IE 10, Chrome, Safari y el último FF y funciona allí. Probablemente no funcionará en IE 9 y por debajo ...

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

Tengo este método de este libro en Safari Books Online: http://bit.ly/11iVv4M

+4

Esto es mucho mejor y no requiere tocar el lado de javascript. –

+0

Pero IE10 no funciona a continuación. –

Cuestiones relacionadas