Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Menú para abrir imágenes

Estas en el tema de Menú para abrir imágenes en el foro de Javascript en Foros del Web. Hola!!!! Estoy intentando crear un menú en el cual, en vez de direccionar a un link de la web, se abriera una imagen en un ...
  #1 (permalink)  
Antiguo 15/06/2015, 05:06
 
Fecha de Ingreso: mayo-2015
Mensajes: 12
Antigüedad: 8 años, 11 meses
Puntos: 0
Menú para abrir imágenes

Hola!!!!

Estoy intentando crear un menú en el cual, en vez de direccionar a un link de la web, se abriera una imagen en un lugar concreto de la página. Otra imagen con otro de los botones del menú, y así sucesivamente.

Es posible?

Y si no es así, poder crear botones de imagen que, al pulsarlos, abran otra imagen en un lugar determinado de la página en cuestión...

Gracias por la ayuda y un saludo!!!!!
  #2 (permalink)  
Antiguo 15/06/2015, 09:09
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: Menú para abrir imágenes

¿Las imágenes están ocultas en el documento o las piensas añadir? Si fuera lo primero, ¿están contenidas dentro del mismo elemento (un <div>, <section>, <article>, etc.) o están en diferentes contenedores?
__________________
«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 15/06/2015, 09:45
 
Fecha de Ingreso: mayo-2015
Mensajes: 12
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Menú para abrir imágenes

Pues la verdad es que soy muy muy muy inexperta y lo único que tengo es un menú sencillo con links. Pensaba que sería fácil abrir una imagen desde ahí...

Cómo me recomiendas entonces que lo haga?
  #4 (permalink)  
Antiguo 15/06/2015, 11:38
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: Menú para abrir imágenes

Un ejemplo sencillo (hay otras maneras de hacer esto):

Código HTML:
Ver original
  1. <nav id = "menu">
  2.     <li>Imagen 1</li>
  3.     <li>Imagen 2</li>
  4.     <li>Imagen 3</li>
  5. </nav>
  6.    
  7. <div id = "imagenes">
  8.     <img src = "imagen1.jpg" class = "invisible" />
  9.     <img src = "imagen2.jpg" class = "invisible" />
  10.     <img src = "imagen3.jpg" class = "invisible" />
  11. </div>

Código CSS:
Ver original
  1. #imagenes img{
  2.     position: absolute;
  3. }
  4.  
  5. .visible{
  6.     opacity: 1;
  7. }
  8.  
  9. .invisible{
  10.     opacity: 0;
  11. }

Código Javascript:
Ver original
  1. document.addEventListener("DOMContentLoaded", function(){
  2.     var opciones = document.querySelectorAll("#menu li"),
  3.         imagenes = document.querySelectorAll("#imagenes img"),
  4.         numOpcion, actual;
  5.    
  6.     [].forEach.call(opciones, function(opcion){
  7.         opcion.addEventListener("click", function(){
  8.             numOpcion = [].indexOf.call(opciones, this);                       
  9.             actual = document.querySelector(".visible") || null;
  10.            
  11.             if (actual){
  12.                 actual.className = "invisible";
  13.             }
  14.            
  15.             imagenes[numOpcion].className = "visible";
  16.         }, false);
  17.     });
  18. }, false);

Lo que hace esto es simple.

En un archivo HTML, tengo un menú con tres opciones y un contenedor con tres imágenes las cuales poseen la clase invisible. El objetivo es mostrar la imagen que corresponda a la opción seleccionada.

En un archivo CSS (este código también puede estar dentro del documento HTML, entre las etiquetas <style></style>), defino una posición absoluta para las imágenes del contenedor (para que se superpongan y ocupen todas el mismo espacio) y dos clases; invisible, que quitará la opacidad a las imágenes al punto de dejarlas invisibles, y visible, que les devolverá la opacidad.

En un archivo JS (este código también puede estar dentro del documento HTML, entre las etiquetas <script></script>), ejecuto una función luego de que haya cargado el documento. En dicha función, tomo al conjunto de opciones del menú y al conjunto de imágenes del contenedor y los almaceno en las variables opciones e imagenes, respectivamente. Enseguida, utilizo el método .forEach() para iterar sobre el conjunto de opciones (también puedes usar estructuras repetitivas como while o for) y, en cada iteración, delego una función por cada vez que el usuario dé un clic en cualquiera de las opciones. En esta función, tomo el número de orden que ocupa la opción pulsada dentro del menú (utilizando el método .indexOf()) y lo asigno a la variable numOpcion, esto con el fin de que se afecte a la imagen equivalente a la opción seleccionada. Luego, tomo a la imagen que posea la clase visible o el valor null si no hay una (como ocurrirá al inicio) y asigno cualquiera de ambos valores a la variable actual; seguidamente, evalúo a esta última variable y en caso de no ser nula (cuando evalúas a una variable en una condición sin compararla con otra variable o valor, se verifica que su valor sea verdadero (true) o que no sea nulo (null) o indefinido (undefined)), le asigno la clase invisible para volver a ocultarla. Esta condición es más útil la primera vez que se intenta mostrar una imagen ya que no hay imágenes con la clase visible pues todas están ocultas (a menos de que decidas mostrar una por defecto), con lo cual evitamos que se muestre el respectivo mensaje de error en consola si intentáramos asignar la clase invisible a un elemento que no existe.

Finalmente, asigno la clase visible a la imagen que corresponda con el número de opción seleccionada.

DEMO

Suponiendo que el código CSS estuviera en un archivo de nombre estilos.css y el código JavaScript en un archivo de nombre script.js, el documento HTML debería de quedar así: (Leer nota más abajo)

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang = "es">
  3.     <meta charset = "utf-8" />
  4.     <title>Ejemplo</title>
  5.     <link rel = "stylesheet" type = "text/css" href = "estilos.css" />
  6.     <script type = "text/javascript" src = "script.js"></script>
  7. </head>
  8.     <nav id = "menu">
  9.         <li>Imagen 1</li>
  10.         <li>Imagen 2</li>
  11.         <li>Imagen 3</li>
  12.     </nav>
  13.    
  14.     <div id = "imagenes">
  15.         <img src = "imagen1.jpg" class = "invisible" />
  16.         <img src = "imagen2.jpg" class = "invisible" />
  17.         <img src = "imagen3.jpg" class = "invisible" />
  18.     </div>
  19. </body>
  20. </html>

NOTA: Los tres archivos (CSS, JS y HTML) deberán de estar al mismo nivel (en el mismo directorio (carpeta) y no dentro de otro(s)), caso contrario, tendrás que añadir la ruta relativa de cada archivo, por ejemplo, si el archivo CSS está dentro de una carpeta llamada Mis estilos y esta está en la misma carpeta en la que está el archivo HTML, entonces, en el atributo href de la etiqueta <link>, deberás de colocar el valor Mis estilos/estilos.css.

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; 15/06/2015 a las 12:03 Razón: Nota
  #5 (permalink)  
Antiguo 16/06/2015, 06:35
 
Fecha de Ingreso: mayo-2015
Mensajes: 12
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Menú para abrir imágenes

Hola!!!

Muchas gracias Alexis88 por tu tutorial. La verdad es que es muy bueno!!

Si yo tuviera más nociones, seguro que avanzaría más, pero ya ves que tan sólo me estoy iniciando... Y esto de ser autodidacta, cada vez me cuesta más...

El problema está en que estoy introduciendo los scripts en BK7. Así, no me deja añadir carpetas ni archivos. Tengo que introducir un único script con toda la información. He intentado introducir tu código que, en la demo es genial, pero cuando yo lo pongo en mi web me salen todas las imágenes debajo del menú escrito, y no me deja hacer clic en las letras del menú...

Seguramente hay algo que estoy poniendo mal... porque además de eso, toda la información CSS me sale escrita en la web. Creo que sólo admite JS...

Ayuda, please?????

Y muchas gracias de nuevo!!!!!
  #6 (permalink)  
Antiguo 16/06/2015, 10:18
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: Menú para abrir imágenes

La verdad, no sé qué será BK7. No sé cómo habrás reacomodado tu código, pero podría tratarse de los estilos que estás aplicando los que generan que las imágenes salgan en esa posición.

Muéstranos el código actualizado y, por favor, utiliza el highlight respectivo.



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
  #7 (permalink)  
Antiguo 19/06/2015, 04:43
 
Fecha de Ingreso: mayo-2015
Mensajes: 12
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Menú para abrir imágenes

Hola!!

Ya dije que no tengo nada de experiencia. Estoy intentando añadir cosas, cambiando el orden de otras, y todo para que no me funcione nada...

En realidad lo que estaba buscando hacer es lo siguiente: algo como lo que reproduce el siguiente script, pero que en vez de ampliar la imagen, lo que haga es que la pequeña sea una imagen que, cuando le hagas click, la grande sea otra. Por ejemplo, la imagen 1 sea un número 1 y se abra la primera imagen que hay cargada. Y así sucesivamente. Y todo esto centrado en la página.

Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.   <head>
  5.     <title>
  6.       Galería
  7.     </title>
  8.     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  9.     <script type="text/javascript">
  10.       //<![CDATA[
  11.       function galeria(x){
  12.         document.ampliar.src=x.src;
  13.       }
  14.       //]]>
  15.     </script>
  16.   </head>
  17.   <body>
  18.     <p>
  19.       <img src="
  20. http://files.123inventatuweb.com/acens8631/image/doc050515-001.jpg
  21. " alt="MÓDULOS BAJOS" width="60" height="60" onclick="galeria(this);"/>
  22.       <img src="
  23. http://files.123inventatuweb.com/acens8631/image/modeloficha.jpg
  24. " alt="MÓDULOS ALTOS" width="60" height="60" onclick="galeria(this);" />
  25.       <img src="
  26. http://files.123inventatuweb.com/acens8631/image/68796dc99c3746c392b757947552c512.jpg
  27. " alt="MÓDULOS COLUMNA" width="60" height="60" onclick="galeria(this);" />
  28.       <br />
  29.       <br />
  30.       <img src="
  31. http://files.123inventatuweb.com/acens8631/image/doc050515-001.jpg
  32. " alt="" width="1000" height="600" name="ampliar" />
  33.     </p>
  34.   </body>
  35. </html>

Es muy difícil para alguien sin experiencia??

Muchísimas gracias, de verdad.
  #8 (permalink)  
Antiguo 19/06/2015, 09:56
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: Menú para abrir imágenes

El decir "no tengo experiencia" no es excusa para no buscar la manera de resolver los problemas, en especial en esta era en la que prácticamente todo está a un clic. Si todos nos excusáramos de esa manera para no hacer algo, no verías nada de lo que ya se ha logrado en las diversas áreas del conocimiento humano. No lo vuelvas a hacer, eso es de mediocres y no creo que lo seas.

Con respecto al script que presentas, si deseas mostrar una imagen asociada a la que se va a pulsar, puedes guardarla en un atributo personalizado, algo así:

Código HTML:
Ver original
  1. <img src = "imagen_inicial1.jpg" data-asociada = "imagen_asociada1.jpg" />

Y para mostrarla con el script que presentas, solo cambiarías la instrucción de la función por esta:

Código Javascript:
Ver original
  1. document.ampliar.src = x.getAttribute("data-asociada");

Y si pretender usar esto en navegadores modernos, puedes hacerlo así:

Código Javascript:
Ver original
  1. document.ampliar.src = x.dataset.asociada;

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
  #9 (permalink)  
Antiguo 25/06/2015, 05:54
 
Fecha de Ingreso: mayo-2015
Mensajes: 12
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Menú para abrir imágenes

Muchísimas gracias Alexis88!!

Perdona por haber tardado tanto en responder. Es un trabajo que voy haciendo a ratos y hasta hoy no había podido entrar a ver el tema.

Con eso de no ser mediocre me has tocado la fibra! Jajaja! De hecho, me ofrecí a hacer la web de la empresa donde trabajo porque era un reto para mi. Luego encontré dificultades que poco a poco he ido resolviendo... Pero el trabajo que un profesional hace en un rato, yo llevo meses para hacerlo!

Ahora es exactamente como quería! Te estoy muy agradecida, de verdad.

Saludos!!!

Etiquetas: página
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 00:26.