Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Problema con onClick

Estas en el tema de Problema con onClick en el foro de Javascript en Foros del Web. Buenas tardes! Tengo un menú armado con imagenes y utilizo onmouseover y onmouseout para intercambiar la imagen. Quedando de la siguiente manera: Cita: <a href="#"><img ...
  #1 (permalink)  
Antiguo 05/03/2015, 08:35
 
Fecha de Ingreso: julio-2008
Mensajes: 57
Antigüedad: 15 años, 9 meses
Puntos: 0
Problema con onClick

Buenas tardes!

Tengo un menú armado con imagenes y utilizo onmouseover y onmouseout para intercambiar la imagen.

Quedando de la siguiente manera:

Cita:
<a href="#"><img src="img/A.jpg" onmouseover="this.src='img/A_hover.jpg'" onmouseout="this.src='img/A.jpg'"/></a>
<a href="#"><img src="img/B.jpg" onmouseover="this.src='img/B_hover.jpg'" onmouseout="this.src='img/B.jpg'"/></a>
<a href="#"><img src="img/C.jpg" onmouseover="this.src='img/C_hover.jpg'" onmouseout="this.src='img/C.jpg'"/></a>
Hasta ahí todo bien, el punto es que necesito que cuando se haga click en un punto de menú tenga la misma imagen que el Hover hasta tanto se haga click en otro punto de menú.

Ejemplo: Le agregué onClick="this.src='img/B_hover.jpg'" pero cuando hago mouse over desaparece, y yo necesito que siga quedando activo (como si fuera un TAB).

Me podrán ayudar?

Desde ya muchas gracias!
  #2 (permalink)  
Antiguo 05/03/2015, 10:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con onClick

¿Esos enlaces son parte del menú que mencionas o en dónde está?
__________________
«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 05/03/2015, 13:46
 
Fecha de Ingreso: julio-2008
Mensajes: 57
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema con onClick

Cita:
Iniciado por Alexis88 Ver Mensaje
¿Esos enlaces son parte del menú que mencionas o en dónde está?
Exacto, necesito que por ejemplo, si presiono sobre el enlace: <a href="#"><img src="img/A.jpg" onmouseover="this.src='img/A_hover.jpg'" onmouseout="this.src='img/A.jpg'"/></a> quede la imagen img/A_hover.jpg hasta tanto presione en otro enlace y asi sucesivamente.
  #4 (permalink)  
Antiguo 05/03/2015, 15:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con onClick

Se me ocurre hacerlo de otra manera.

Código HTML:
Ver original
  1. <nav id = "menu">
  2.     <img src = "imagen1.jpg" data-img = "imagen1-hover.jpg" />
  3.     <img src = "imagen2.jpg" data-img = "imagen2-hover.jpg" />
  4.     <img src = "imagen3.jpg" data-img = "imagen3-hover.jpg" />
  5. </nav>

Código Javascript:
Ver original
  1. var aux1, aux2;
  2.  
  3. [].forEach.call(document.querySelectorAll("#menu img"), function(img){ 
  4.     img.addEventListener("mouseover", function(){
  5.         if (this.className != "estatico"){
  6.             aux1 = this.src;
  7.             this.src = this.dataset.img;
  8.             this.dataset.img = aux1;   
  9.         }
  10.     }, false);
  11.    
  12.     img.addEventListener("mouseout", function(){
  13.         if (this.className != "estatico"){
  14.             aux1 = this.src;
  15.             this.src = this.dataset.img;
  16.             this.dataset.img = aux1;   
  17.         }
  18.     }, false);
  19.    
  20.     img.addEventListener("click", function(){
  21.         aux1 = document.querySelector(".estatico");
  22.         if (aux1 && aux1 != this){
  23.             aux1.className = "";
  24.             aux2 = aux1.src;
  25.             aux1.src = aux1.dataset.img;
  26.             aux1.dataset.img = aux2;
  27.         }
  28.  
  29.         if (aux1 == this){
  30.             this.className = "";
  31.         }
  32.         else{
  33.             this.className = "estatico";   
  34.         }
  35.     }, false);
  36. });

Lo que hago es simple. Cada imagen del menú posee una imagen inicial y una segunda imagen almacenada en el pseudo-atributo data-img. Esta última es la que mostraremos cuando se pose el cursor del mouse sobre la imagen.

En el código JavaScript, declaro dos variable que usaré más adelante y tomo a todas las imágenes del menú y a cada una le aplico distintas funciones según sea el evento que se produzca en ellas.

En el primer evento (mouseover), verifico que la imagen no posea la clase 'estatico'; de ser así, tomo la ruta de la imagen actual y la almaceno en una variable auxiliar, luego, tomo ruta de la imagen almacenada en el pseudo-atributo data-img y la asigno como nueva imagen, mientras que a la ruta original, la asigno a dicho pseudo-atributo.

En el segundo evento (mouseout), el proceso es el mismo, pues, en el anterior evento, la ruta de la imagen original queda almacenada en el pseudo-atributo, por lo tanto, al hacer el cambio, nuevamente tomará dicha ruta. Puedes abstraer ese pequeño bloque de código y colocarlo en una función para que así no repitas las mismas líneas, solo lo dejé así para que sea lo más claro posible.

En el tercer evento (click), tomo al elemento que posea la clase 'estatico' y si se encuentra alguno y es distinto al elemento actual, le quito dicha clase, tomo la ruta de su imagen actual y la almaceno en una variable, le asigno la que tenía guardada en el pseudo-atributo y la original quedará guardada en el mismo. Exactamente lo mismo que hice en los dos anteriores eventos. Para que nuevamente las tres imágenes cambien al pasar y quitar el cursor del mouse sobre ellas, le quito la clase 'estatico' a la imagen si es que ya la posee y se la asigno si no es así, es decir, si es distinta al elemento almacenado en aux1.

Como podrás ver, luego de dar un clic a cualquiera de las imágenes, no se produce el cambio de ruta en ella al retirar el cursor del mouse pues hay una condición que debe de cumplirse, la cual señala que la imagen no debe de poseer la clase 'estatico', pero como al darle clic se la asignamos, no habrá cambio alguno hasta que se le dé un clic a otra imagen.

DEMO

No olvides colocar este código después del último elemento de tu documento HTML y justo antes de la etiqueta </body> para que surta efecto.

Saludos
__________________
«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

Última edición por Alexis88; 05/03/2015 a las 15:43 Razón: Adición de líneas

Etiquetas: 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 16:18.