Foros del Web » Programando para Internet » Javascript »

Botones con mouseover mouseout y onclick

Estas en el tema de Botones con mouseover mouseout y onclick en el foro de Javascript en Foros del Web. Hola gente, aca vengo con mi primer duda... Actualmente estoy desarrollando un sitio web puse los botones de un menu con "imagen de transicion" en ...
  #1 (permalink)  
Antiguo 08/03/2012, 16:10
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Botones con mouseover mouseout y onclick

Hola gente, aca vengo con mi primer duda...

Actualmente estoy desarrollando un sitio web puse los botones de un menu con "imagen de transicion" en el dreamweaver cs5.5 pero sin obtener los resultados que deseo, ya que tengo la linda "animacion" de que con el mouseover y el mouseout me cambie de color el boton, pero al clickearlo deseo que quede del mismo color que cuando esta con mouseover...y, obviamente, no se como hacer esto y por eso es que pido ayuda...

Recuerden que estoy utilizando imagenes, por lo tanto busco alguna funcion para que al clickear el boton me cargue la misma imagen que con el mouseover.

Ademas de todo esto, tambien es algo fundamental que al clickear en otro boton, todos los botones vuelvan a su estado original (mouseout) excepto el clickeado que debera cambiar a la imagen en su estado mouseover.

Bueno, espero haber sido claro, desde ya muchas gracias!
  #2 (permalink)  
Antiguo 08/03/2012, 17:52
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Botones con mouseover mouseout y onclick

Absolutamente todo eso se puede lograr con CSS.

Código HTML:
Ver original
  1. <!doctype html>
  2.     <title>Test</title>
  3.     <style type="text/css">
  4.     <!--
  5.         .boton{
  6.             background:red;
  7.         }
  8.         .boton:hover{
  9.             background:blue;
  10.         }
  11.         .boton:active{
  12.             background:green;
  13.         }
  14.     -->
  15.     </style>
  16. </head>
  17.     <a href="#" class="boton">Click ac&aacute;</a>
  18. </body>
  19. </html>

No importa si usás imágenes o colores sólidos o lo que sea.

Con imágenes necesitás en realidad crear una imagen sola con todos los estados (normal, hover y active) y en cada estado la "movés" usando background-position. Acá hay una especie de tutorial, que no me gustó mucho pero tal vez te sirva: http://www.tekoestudio.com/como-crea...n-css-sprites/

Ignorá la parte del diseño del botón, sólo te interesaría saber cómo hacer la técnica con CSS.
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 09/03/2012, 06:56
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Botones con mouseover mouseout y onclick

Hola, muchas gracias por la respuesta. Vi el tutorial pero en verdad no veo la parte del codigo en donde se "mueve" el boton para que cambie de color...si me podes dar una mano con eso te estaria muy agradecido!

Ah, otra cosa. Probe el codigo que pusiste y a pesar de que cambia de color al darle click no es lo que yo busco...ya que no queda "trabado" en el color al clickearlo, solo se pasa a verde mientras estas haciendo el click, cuando lo soltas se va al color del mouseover/mouseout.
  #4 (permalink)  
Antiguo 09/03/2012, 07:07
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Botones con mouseover mouseout y onclick

Entonces no entiendo muy bien lo que querés...

Mirá, este es un sitio algo viejo que hice, observá el comportamiento de los botones: www.cofatuc.org.ar/olimpiadas2011/

¿Algo así?
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 09/03/2012, 08:09
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Botones con mouseover mouseout y onclick

te explico bien de que es la web, por ahi te ayuda a entenderme...

Los botones son diferentes marcas de perfumes, como kenzo, carolina herrera, etc... Que, al presionarlos, cargan los perfumes de esa marca que presionaste, es decir, si apretas kenzo, debajo te carga todos los perfumes pertenecientes a la marca kenzo, y asi lo mismo con todas las otras marcas.
Hasta ahora, los logos de las marcas de los perfumes estan en color gris, y al pasar el mouse por encima se colorean en azul. Lo que estoy buscando es que al clickear en alguna marca, ese logo que clickean quede en azul hasta que clickeen en otra marca, ahi es cuando se tiene que poner en azul la nueva marca clickeada, y la marca anterior volver a gris.

Me explico ?
  #6 (permalink)  
Antiguo 09/03/2012, 08:43
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Botones con mouseover mouseout y onclick

Entiendo.

Bueno te puedo mostrar un ejemplo sencillo. Está hecho con jQuery porque hace que muchas tareas (como animar y quitar y agregar clases) sea muy sencillo de nuestra parte:

Código HTML:
Ver original
  1. <!doctype html>
  2.     <title></title>
  3.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  4.     <script type="text/javascript">
  5.         $(function(){
  6.             //variables de configuración
  7.             var opacidad_inicial = 0.4;
  8.             var opacidad_final   = 1;
  9.             var clase_activo = 'boton-activo';
  10.             var clase_boton = 'boton';
  11.            
  12.            
  13.             //obtenemos los botones
  14.             var botones = $('.' + clase_boton);
  15.             //apliamos estilos iniciales
  16.             botones.css({
  17.                 opacity:opacidad_inicial
  18.             });
  19.             //animación al pasar el mouse
  20.             botones
  21.                 .mouseenter(function(){
  22.                     $(this).not('.' + clase_activo).stop().animate({
  23.                         //incluir estilos
  24.                         opacity:opacidad_final
  25.                     });
  26.                 })
  27.                 .mouseleave(function(){
  28.                     $(this).not('.' + clase_activo).stop().animate({
  29.                         //incluir estilos
  30.                         opacity:opacidad_inicial
  31.                     });
  32.                 });
  33.             //agregar clase activa si se hace click
  34.             botones.click(function(){
  35.                 botones.not(this).removeClass(clase_activo).trigger('mouseleave');
  36.                 $(this).addClass(clase_activo)
  37.             });
  38.         });
  39.     </script>
  40.     <style type="text/css">
  41.     <!--
  42.         .boton{
  43.             /* Estilos comunes para TODOS los botones */
  44.             display:block;
  45.             float:left;
  46.             width:200px;
  47.             height:200px;
  48.             text-indent:-3333px; /*ocultar el texto*/
  49.         }
  50.         /* Estilos para cada boton*/
  51.         #boton-axe{ background:url(http://www.thescentfactoryonline.com/yahoo_site_admin/assets/images/axe_unlimited.68181717.jpg); }
  52.         #boton-rexona{ background:url(http://www.informabtl.com/wp-content/uploads/2011/07/Imagen-REXONA-FINAL1.jpg); }
  53.         #boton-rexona-cd{ background:url(http://babyccinoblog.com/wp-content/uploads/2008/04/rexona2.jpg); }
  54.         /* estilos para el boton activo */
  55.         .boton-activo{
  56.            
  57.         }
  58.     -->
  59.     </style>
  60. </head>
  61.     <!-- el boton es un link con el texto axe unlimited, el cual ocultamos y ponemos una imagen -->
  62.     <a class="boton" id="boton-axe" href="#">Axe Unlimited</a> 
  63.     <a class="boton" id="boton-rexona" href="#">Rexona Men</a>
  64.     <a class="boton" id="boton-rexona-cd" href="#">Rexona Cotton dry</a>
  65. </body>
  66. </html>

Lai dea es tener un enmarcado válido, fijate que el HTML es sencillo y correcto (excepto que los links no llevan a ningún lado, pero deberían).

Cada <a> tiene una clase (boton) y un id que lo identifica como único para poder asignarle la imagen con CSS.

Respecto al script, hace lo siguiente:
  1. Obtiene algunas variables que vos configurarías, como ser opacidad, clases, etc. La clase para la variable clase_activo es la que definiría los estilos e identificaría cual botón es el activo ahora.
  2. Aplica el estilo inicial que tendrían todos los botones
  3. Asigna un evento para que al pasar el mouse, se aplica una opacidad y al sacarlo se aplique otra.
  4. Asigna una función al evento 'click', que lo que hace es quitarle la clase activa a todos los botones menos al que se le hizo click y disparar el evento 'mouseleave' para que se realice la animación (Hacé la prueba, hacé click en un botón y después en otro. Vas a ver que el primer botón pierde la opacidad con una animación, como si sacaras el mouse de él).
  5. Luego le asigna la clase activa al botón que clickeaste.

Entonces la idea es esa. Basate en ese script para hacer lo tuyo, tal vez no varíe demasiado.

Usá los métodos addClass() y removeClass() para agregar y quitar clases, las cuales tendrían estilos asignados en el CSS

Espero se entienda :P
__________________
nahueljose.com.ar
  #7 (permalink)  
Antiguo 09/03/2012, 12:44
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Botones con mouseover mouseout y onclick

Te agradezco muchicisimo el interes nahuel, no mire mucho el codigo ya que me estoy yendo pero te pregunto, es posible sustituir el efecto que hace de opacidad, por la carga de diferentes imagenes? Es decir, en ves de que se aclare y oscurezca, que cargue una imagen de origen y despues otra para el mouse over (y que quede con esa si se clickea)?
  #8 (permalink)  
Antiguo 09/03/2012, 14:08
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Botones con mouseover mouseout y onclick

Eso es lo que muestra el tutorial que te pasé. Te voy a explicar de nuevo.

Mirá este ejemplo:
Código HTML:
Ver original
  1. <!doctype html>
  2.     <title></title>
  3.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  4.     <script type="text/javascript">
  5.         $(function(){
  6.             //variables de configuración
  7.             var clase_activo = 'boton-activo';
  8.             var clase_boton = 'boton';         
  9.            
  10.             //obtenemos los botones
  11.             var botones = $('.' + clase_boton);
  12.            
  13.             //agregar clase activa si se hace click
  14.             botones.click(function(){
  15.                 botones.not(this).removeClass(clase_activo);
  16.                 $(this).addClass(clase_activo)
  17.             });
  18.         });
  19.     </script>
  20.     <style type="text/css">
  21.     <!--
  22.         .boton{
  23.             /* Estilos comunes para TODOS los botones */
  24.             display:block;
  25.             float:left;
  26.             width:88px;
  27.             height:198px;
  28.             text-indent:-3333px; /*ocultar el texto*/
  29.             background-position:right; /* ubicar la imagen de fondo hacia la derecha */
  30.         }
  31.         /* estilos para cada boton */
  32.         #boton-axe{
  33.             background-image:url('http://nahueljose.com.ar/upload/uploads/axe.jpg');           
  34.         }
  35.         /* estilos para el boton activo y para el hover */
  36.         .boton:hover, .boton-activo{
  37.             background-position:left; /* ubicar la imagen de fondo hacia la izquierda */
  38.         }
  39.     -->
  40.     </style>
  41. </head>
  42.     <!-- el boton es un link con el texto axe unlimited, el cual ocultamos y ponemos una imagen -->
  43.     <a class="boton" id="boton-axe" href="#">Axe Unlimited</a>
  44. </body>
  45. </html>


La primera parte se puede lograr sólo con CSS. Lo que necesitás es crear una imagen sprite. Es decir, una imagen de tu boton con todos los estados. Ejemplo:


Entonces, en este ejemplo, cada parte tiene 98px por 198px. Creás un elemento y le asignás esas dimensiones (en este caso) y ubicás el fondo hacia un lado (usando background-position).

Vos querés que cuando se pase el mouse cambie de color o de estado. Entonces lo que tenés que hacer es "mover" el fondo que creaste nuevamente pero hacia el otro lado.

Además, si al hacer click querés que se quede con la misma forma que si estuviese el mouse encima, quiere decir que el estado :hover tiene que compartir el estilo con la clase .boton-activo. Esta clase necesitamos agregarla con jQuery. Es para lo único que usamos javascript, sólo para agregarle la clase cuando se hace click y quitársela a los demás.

Estudiá el ejemeplo, está todo ahí! Hasta podés usar el mismo código.
__________________
nahueljose.com.ar
  #9 (permalink)  
Antiguo 10/03/2012, 10:57
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Botones con mouseover mouseout y onclick

Naahuel mil gracias, leyendo el codigo entendi practicamente todo y ya pude usar el codigo para lo que queria. De nuevo muchas gracias!
  #10 (permalink)  
Antiguo 25/09/2013, 14:01
 
Fecha de Ingreso: mayo-2012
Mensajes: 117
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Botones con mouseover mouseout y onclick

Pregunta no hay una forma de poner las imagenes en html y los efectos en css, tengo ese mismo problema pero las imagenes las necesito en html y no dentro del css ahora el efecto lo hare con otra imagen que seria el efecto como morado transparente que le quiero dar lo quiero hacer en css o javascript.... trate con tu codigo pero inmediatamente muevo la imagen del css se me desaparecen y no puedo volverlas a poner te agradeceria un monton esa ayudita....

Etiquetas: botones, funcion, mouseout, mouseover, onclick
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 11:03.