Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Anular efecto Hover al hacer click en un botón

Estas en el tema de Anular efecto Hover al hacer click en un botón en el foro de Jquery en Foros del Web. Hola a todos. Necesito ayuda por favor con un "problema" que no puedo resolver hace horas. Quiero que, al pasar el cursor por un botón ...
  #1 (permalink)  
Antiguo 25/03/2016, 14:18
Avatar de eduardobrutaldeath  
Fecha de Ingreso: agosto-2013
Ubicación: América
Mensajes: 306
Antigüedad: 11 años, 4 meses
Puntos: 3
Anular efecto Hover al hacer click en un botón

Hola a todos.

Necesito ayuda por favor con un "problema" que no puedo resolver hace horas.

Quiero que, al pasar el cursor por un botón blanco, éste cambie a negro, y al sacarlo, regrese a blanco, pero además, que cuando le de click el botón cambie a rojo, y al darle otro click, retorne a blanco.... ¿Parece sencillo no?.. Yo también pensé lo mismo.. Tal vez para ustedes sí sea fácil, por eso posteo.

AQUÍ MI CÓDIGO DE EJEMPLO :

Código HTML:
Ver original
  1. <div>
  2. BOTÓN
  3. </div>

Código Javascript:
Ver original
  1. /*HOVER*/
  2. $( 'div' ).hover( function (  ) {
  3.  
  4.  $( this ).css( 'background', '#000' ) ;
  5.  
  6. }, function (  ) {
  7.  
  8.  $( this ).css( 'background', '#fff' ) ;
  9.  
  10. } ) ;
  11.  
  12. /*CLICK*/
  13. $( 'div' ).click( function (  ) {
  14.  
  15.  $( this ).css( 'background', '#f00'  ) ;
  16.  
  17. } ) ;

Todo bien cuando hago hover ; al entrar el botón cambia a negro y al salir regresa a blanco. Todo bien también cuando hago click ( el elemento se pinta de rojo ). El problema viene cuando salgo del botón, pues como el efecto hover está activado, el color rojo del botón cambia a blanco, y la idea es que se quede en rojo hasta que lo pinche otra vez, y nuevamente retorne a blanco.

No se me ocurre ninguna forma para desactivar el hover. He probado con condicionales, deteniendo animaciones, y nada. No sé qué me pasa hoy ; creo que, de estar tantas horas intentando e intentando ya me aburrí, y no tengo ganas de seguir...
Ojalá me puedan ayudar.
  #2 (permalink)  
Antiguo 26/03/2016, 11:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Anular efecto Hover al hacer click en un botón

Utiliza una variable con valor que cambie cada vez que des un clic en el botón, de tal forma que puedas utilizarla en una condición dentro de la función manejadora del método .hover(). Por ejemplo, si el valor de la variable es igual a 1, dejas que se aplique el efecto; caso contrario, lo ignoras.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 26/03/2016, 20:35
Avatar de eduardobrutaldeath  
Fecha de Ingreso: agosto-2013
Ubicación: América
Mensajes: 306
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: Anular efecto Hover al hacer click en un botón

Cita:
Iniciado por Alexis88 Ver Mensaje
Utiliza una variable con valor que cambie cada vez que des un clic en el botón, de tal forma que puedas utilizarla en una condición dentro de la función manejadora del método .hover(). Por ejemplo, si el valor de la variable es igual a 1, dejas que se aplique el efecto; caso contrario, lo ignoras.

Un saludo
Hola.
No funciona.
Ayer intenté algo parecido, sólo que no lo mostré porque era muy largo. Mira, aquí un ejemplo breve :

Código Javascript:
Ver original
  1. var c = "click" ;
  2.  
  3. $( 'div' ).click( function (  ) {
  4.  
  5.   $( this ).toggleClass( 'click' ) ;
  6.  
  7.   if ( $( this ).attr( 'class' ) !== c ) {
  8.  
  9.     $( this ).hover( function (  ) {
  10.  
  11.       $( this ).css( 'color', 'blue' ) ;
  12.  
  13.     }, function (  ) {
  14.  
  15.       $( this ).css( 'color', 'red' ) ;
  16.  
  17.     } ) ;
  18.  
  19.   } else {
  20.  
  21.     $( this ).css( {
  22.  
  23.       color : '#fff',
  24.       background : '#000'
  25.  
  26.     } ) ;
  27.  
  28.   }
  29.  
  30. } ) ;
Cuando hago click, al div se le asigna la clase CLICK, y su estilo pasa a ser, fondo negro y letras blancas. Cuando vuelvo a hacer click, se elimina la clase del elemento y se ejecuta el hover ;es decir, cuando entro las letras son azules y cuando salgo rojas.. Todo bien hasta ahí, pero cuando vuelvo a hacer click y saco el cursor del elemento, el hover se sigue ejecutando. O sea se queda el div negro con letras blancas, pero al salir de él el texto cambia a rojo y al entrar a azul. ¿Entiendes? El hover no muere! U_U
  #4 (permalink)  
Antiguo 26/03/2016, 22:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Anular efecto Hover al hacer click en un botón

El problema no es el establecimiento de la clase sino la lógica que estás aplicando.

Esto puede ayudarte mucho:
Código Javascript:
Ver original
  1. $("div").on("click", function(){
  2.     $(this).toggleClass("clase");
  3.     if ($(this).hasClass("clase")){
  4.         $(this).css("background", "red");
  5.     }
  6.     else{
  7.         $(this).css("background", "white");
  8.     }
  9. }).hover(function(){
  10.     if (!$(this).hasClass("clase")){
  11.         $(this).css("background", "black");
  12.     }
  13. }, function(){
  14.     if (!$(this).hasClass("clase")){
  15.         $(this).css("background", "white");
  16.     }
  17. });

Cuando le des un clic al elemento, se añadirá o quitará la clase; además, se comprobará que este posea dicha clase. En caso de tenerla, se cambiará su color de fondo a rojo; de lo contrario, se establecerá al color blanco como nuevo color de fondo del elemento.

Cuando se pose el cursor del ratón sobre el elemento, se comprobará si el elemento no posee la clase; de ser así, se cambiará su color de fondo a negro, y cuando se retire el cursor del elemento, si este no posee la clase, se le cambiará el color de fondo por el blanco.

DEMO

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 27/03/2016, 20:20
Avatar de eduardobrutaldeath  
Fecha de Ingreso: agosto-2013
Ubicación: América
Mensajes: 306
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: Anular efecto Hover al hacer click en un botón

Cita:
Iniciado por Alexis88 Ver Mensaje
El problema no es el establecimiento de la clase sino la lógica que estás aplicando.

Esto puede ayudarte mucho:
Código Javascript:
Ver original
  1. $("div").on("click", function(){
  2.     $(this).toggleClass("clase");
  3.     if ($(this).hasClass("clase")){
  4.         $(this).css("background", "red");
  5.     }
  6.     else{
  7.         $(this).css("background", "white");
  8.     }
  9. }).hover(function(){
  10.     if (!$(this).hasClass("clase")){
  11.         $(this).css("background", "black");
  12.     }
  13. }, function(){
  14.     if (!$(this).hasClass("clase")){
  15.         $(this).css("background", "white");
  16.     }
  17. });

Cuando le des un clic al elemento, se añadirá o quitará la clase; además, se comprobará que este posea dicha clase. En caso de tenerla, se cambiará su color de fondo a rojo; de lo contrario, se establecerá al color blanco como nuevo color de fondo del elemento.

Cuando se pose el cursor del ratón sobre el elemento, se comprobará si el elemento no posee la clase; de ser así, se cambiará su color de fondo a negro, y cuando se retire el cursor del elemento, si este no posee la clase, se le cambiará el color de fondo por el blanco.

DEMO

Estoy comparando y tratando de comprender qué hizo la diferencia, por qué tu condición sí funcionó y la mía no.
Como sea, te agradezco por tomarte un tiempo para resolver mi problema.
Chau, y otra vez gracias.

Etiquetas: anular, efecto, hover
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:51.