2012-09-10 13 views
6

tengo algo de CSS para cambiar mi imagen en escala de grises (con un poco de SVG para Firefox)escala de grises con la animación CSS

img.grayscale{ 
      filter: grayscale(100%); 
      -webkit-filter: grayscale(100%); 
      -moz-filter: grayscale(100%); 
      -ms-filter: grayscale(100%); 
      -o-filter: grayscale(100%); 
      filter: url(desaturate.svg#greyscale); 
      filter: gray; 
      -webkit-filter: grayscale(1); 
     } 

pero ahora quiero animación en vuelo estacionario para cambiar el valor de la escala de grises a 0.

Tengo este código pero no hace nada (en Chrome, por supuesto), no tengo idea de por qué no anima en absoluto.

<script type="text/javascript"> 
     $(".grayscale").hover(
      function() { 
       $(this).animate({ 
        '-webkit-filter': 'grayscale('0'%)' 
       }, 300); 
      } 
     ); 
    </script> 

Creo que es posible animar el% de 100% a 0%, ¿no?

Edit: Estoy tratando de hacer para todos los navegadores, no solo Chrome, sino que hago mis pruebas en Chrome, es por eso que no estoy cambiando todas las propiedades. Creo que cuando voy a encontrado la respuesta para el cromo voy a hacer lo mismo para los otros navegadores :)

+1

intente quitar las comillas adicionales en ' 'en escala de grises (' 0 '%)'' –

Respuesta

0

Editar como esto

<script type="text/javascript"> 
    $(".grayscale").hover(
     function() { 
      $(this).animate($(this).css("-webkit-filter" , "grayscale('0'%)"), 300); 
     } 
    ); 
</script> 
+0

aparentemente no funciona :( – user1660309

+0

' ' Con esto se hizo el cambio, pero no la animación :( – user1660309

+1

$ (this) .css ("webkit-transición", "1000 ms"); $ (this) .css (" - webkit- filter "," escala de grises (100%) "; Esto hará que la animación también :-) –

10

¿Por qué utilizar animado() en absoluto? Ya estás animando para webkit, ¿por qué no utilizar la propiedad y las clases de transición para activar la animación? De esta manera:.

img { 
    -webkit-transition: all 300ms; 
} 

img.grayscale { 
    -webkit-filter: grayscale(1); 
} 

Y luego simplemente quitar la clase llamando

$ ('img.grayscale') removeClass ('escala de grises');

Nota: No sé cuál es la propiedad específica para simplemente animar solo la escala de grises, pero si no está haciendo ninguna otra transición en el elemento, la transición de "todo" funciona bien.

+0

así que estoy tratando de animar para cada navegador, pero estoy probando la función animate() en cromo porque uso Chrome para mis pruebas Pensé que si podía apuntar a una propiedad sería fácil apuntar a otra propiedad :) – user1660309

+0

a partir de hoy, FF 35 implementó los filtros, y ahora esta es la respuesta correcta y debe ser aceptado –

0

También puede establecer CSS en línea usando onmouseover y onmouseout

<img src="image.jpg" onmouseover="$(this).css('-webkit-filter','grayscale(100%)')" onmouseout="$(this).css('-webkit-filter','grayscale(0%)')" style="-webkit-transition:1000ms;"> 
+1

ohh lo siento por favor agregue jquery js antes usando este código – JDev

0

Es posible utilizar mi función tonta. Pero funciona :)

HTML;

<img src ="http://upload.wikimedia.org/wikipedia/en/6/62/American_McGee_Alice_box.gif" border="0" class="ongray" /> 

CSS;

img {-webkit-transition:-webkit-filter 0.3s ease-in-out;} 
.g {-webkit-filter: grayscale(1);} 

JS;

$(".ongray").hover(
    function(){$(this).addClass("g")}, 
    function(){$(this).removeClass("g");} 
); 

http://jsfiddle.net/kEC92/3/

0
.grayscale{ 
     filter: grayscale(0%); 
     -webkit-filter: grayscale(0%); } 

.grayscale:hover{ 
      filter: grayscale(100%); 
      -webkit-filter: grayscale(100%); } 
Cuestiones relacionadas