2009-03-03 7 views
5

En la clase css "employee_mouseover" hago que el color bg sea rojo.jquery addclass/removeclass no siempre funciona cuando se establece "velocidad" (eventos del mouse)

 $(".employee").bind("mouseenter", function() { 
      $(this).addClass("employee_mouseover"); 
     }); 
     $(".employee").bind("mouseleave", function() { 
      $(this).removeClass("employee_mouseover"); 
     }); 

Esto funciona bien.

Pero, cuando configuro una velocidad para que se vea más bonita, el elemento permanece rojo cuando hago rápidamente un mouseenter + mouseleave;

$(".employee").bind("mouseenter", function() { 
     $(this).addClass("employee_mouseover", "fast"); 
    }); 
    $(".employee").bind("mouseleave", function() { 
     $(this).removeClass("employee_mouseover", "fast"); 
    }); 

Esto no funciona bien, a menos que entre y salga del elemento muy lentamente.

¿Hay una mejor manera de hacerlo?

Gracias de antemano.

+0

Yo ni siquiera sabía que removeClass y addClass aceptaron un segundo parámetro con una velocidad. –

+0

@Paolo: no es así. –

+0

¿cómo se puede eliminar una clase lentamente? – fmsf

Respuesta

3

Se puede hacer, pero debe instalar el jquery coloranimate plugin. A continuación, puede utilizar el siguiente código para cambiar el color poco a poco:

$(".employee").bind("mouseenter", function() { 
    $(this).animate({backgroundColor: "#bbccff"}, "slow"); 

}); 
$(".employee").bind("mouseleave", function() { 
    $(this).animate({backgroundColor: "white"}, "slow"); 
}); 
+1

Gracias por esta respuesta constructiva. Las otras respuestas también fueron útiles de una manera educativa, pero esta me dio una manera de lograr lo que estaba tratando de hacer. ¡Gracias! –

2

Sí, hazlo en CSS.

.employee:hover{background:pink;} 

Además, there is no speed parameted for addClass, la velocidad sólo existe para los efectos.

+0

Eso no me permite configurar la velocidad para que se vea bonita, ¿no? Además, tengo que habilitar/deshabilitar los eventos del mouse a veces cuando el usuario hace cosas .. –

+0

"Además, no hay velocidad parametrada para addClass, la velocidad solo existe para efectos." Eso no parece ser cierto, ya que funciona cuando lo hago lentamente. Describí estas dos cosas en mi publicación original. –

+0

@Thomas: en realidad es muy cierto. –

1

addClass es para agregar clases de CSS a los elementos. Si está buscando cambiar alguna propiedad CSS interpolando, entonces debe hacerlo explícitamente usando Effects.

Su código:

$(this).addClass("employee_mouseover", "fast"); 

añadirá dos clases, employee_mouseover y fast a this, lo que obviamente no es lo que está buscando.

+0

Creo que pegaste el código incorrecto allí. Además, se ignora "rápido". –

+0

Wow, tienes toda la razón. Así es. :) Supongo que es una cadena delimitada por comas en su lugar. – obeattie

3

Está utilizando el evento incorrecto. Desea:

$(".employee").hover(function() { 
$(this).addClass("employee_mouseover"); 
}, function() { 
$(this).removeClass("employee_mouseover"); 
}); 

Y no hay argumento de velocidad para agregar o quitar clases.

6

del jQuery UI docs:

los efectos núcleo de jQuery UI extiende el API de la clase base para poder animar entre dos clases diferentes. Los siguientes métodos son cambiados. Ahora aceptan tres parámetros adicionales: velocidad, aceleración (opcional) y devolución de llamada.

Así que @Thomas debe haber incluido las bibliotecas jQuery y jQuery UI en su página, lo que permite la velocidad y los parámetros de devolución de llamada para agregarClass y removeClass.

+0

esa es una información muy buena, gracias –

0

Además, no hay velocidad parametrada para addClass, la velocidad solo existe para los efectos.

Correcto.

Pero tal vez esto podría ayudar Plugin:

animate-to-class

0
$(".employee").hover(function() { 
    $(this).stop().animate({ backgroundColor: "#bbccff" }, "slow"); 
}, function() { 
    $(this).stop().animate({ backgroundColor: "white" }, "slow"); 
}); 
2

hay un parámetro de duración para removeClass (http://docs.jquery.com/UI/Effects/removeClass), pero no funciona en FF. ¿Hay algo mal con mi código? Soy nuevo en JQuery. Voy a probar la función de animación ahora.

Lo que trato de hacer aquí es usar los anclajes y luego resaltar la ubicación del ancla de destino cuando se hace clic en el ancla. Aquí está mi código HTML -

<ul> 
       <li><a href="#caricatures">Caricatures</a></li> 
       <li><a href="#sketches">Sketches</a></li> 
</ul> 

Mi destino es el ancla -

<a href="#" id="caricatures"><h3>Caricatures</h3></a> 

Aquí es donde podría el color de fondo para cambiar.

Aquí es mi CSS -

<style> 
      .spotlight{ 
       background-color:#fe5; 
      } 
</style> 

Aquí está mi código de jQuery -

<script> 
    $('a[href$="caricatures"]').click(function(){ 
     $('a[id="caricatures"] h3').addClass("spotlight"); 
     $('a[id="caricatures"] h3').removeClass("spotlight",1000); 
    }); 
    </script> 
+1

Leo la documentación del método animado() (http://api.jquery.com/animate/) y dice: "ancho, alto o izquierdo pueden ser animados pero el color de fondo no puede ser . ". Es por eso que mi .animate() no estaba funcionando. switchClass tampoco funciona. Y no quiero alternar Class. – designplusdev

+0

Una corrección a mi comentario anterior - Intenté animar backgroundColor en otro ejemplo y funcionó. Simplemente me llamó la atención y de ahí este nuevo comentario. Así que ahora estoy confundido por qué la documentación decía que el color de fondo no funcionaría. ¿Quieren decir que "color de fondo" no funcionará, pero "color de fondo" sí? – designplusdev

+0

Finalmente pude hacer que mi código funcionara. Gracias a todos por sus respuestas. Agregué solo una línea más a mi código: incluí el archivo de script "jquery-ui-1.8.6.custom.min.js" y mi código anterior funciona perfectamente bien. No se menciona la inclusión de este script en la documentación/ejemplos de addClass (http://api.jquery.com/addClass/). No me di cuenta de que era parte de JQuery UI. – designplusdev

0

Puede utilizar las transiciones CSS3 para lograr este efecto.

a:hover { 
    color: red; 
    -webkit-transition: 1s color linear; 
    -moz-transition: 1s color linear; 
} 

a:link, a:visited { 
    color: white; 
    -webkit-transition: 1s color linear; 
    -moz-transition: 1s color linear; 
} 
1

Aquí es mi transición con jQuery:

$("#layoutControl .actionList").click(
    function(){ 
     $("#assetsContainer").fadeOut("fast",function(){ 
      $(this).removeClass("assetsGrid").addClass("assetsList"); 
      $("#iconList").attr("src", "/img/bam/listIcon.png"); 
      $("#iconGrid").attr("src", "/img/bam/gridIconDim.png"); 
      $(this).fadeIn("fast"); 
     }); 
    } 
); 
Cuestiones relacionadas