Foros del Web » Programando para Internet » Javascript »

Problema con un array

Estas en el tema de Problema con un array en el foro de Javascript en Foros del Web. Hola tengo el siguiente array En el <head> tengo el siguiente script Código: <!-- Rotacion de cuatro imagenes tiempo 4 segundos de transicion --> <script> ...
  #1 (permalink)  
Antiguo 14/05/2014, 04:46
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 5 meses
Puntos: 0
Problema con un array

Hola tengo el siguiente array
En el <head> tengo el siguiente script
Código:
 <!-- Rotacion de cuatro imagenes  tiempo 4 segundos de transicion -->
<script>
//creo array de imágenes
array_imagen = new Array(4)
array_imagen[0] = new Image(180,45) 
array_imagen[0].src = "1.jpg"
array_imagen[1] = new Image(180,45) 
array_imagen[1].src = "2.jpg"
array_imagen[2] = new Image(180,45)
array_imagen[2].src = "3.jpg"
array_imagen[3] = new Image(180,45)
array_imagen[3].src = "4.jpg"

//creo el array de URLs
array_url = new Array(4)
array_url[0] = "ones.html"
array_url[1] = "dcivil.html"
array_url[2] = "salida.html"
array_url[3] = "civil.html"

//variable para llevar la cuenta de la imagen siguiente
contador = 0

//función para rotar el banner
function alternar_imagen(){
    window.document["funcionimagen"].src = array_imagen[contador].src
    window.document.links[0].href = array_url[contador]
    contador ++
    contador = contador % array_imagen.length
    setTimeout("alternar_imagen()",4000)
} 
</script>
y en el <body> tengo el siguiente codigo
Código:
 
<body onload="alternar_imagen()">
  <a href="" ><img src="melacion.jpg" name="funcionimagen" alt="cambio de imagen"></a>
codigo css

Código:
.desvanecer{
position:relative;
height:45px;
margin:0px;
width:180px;
 }
.desvanecer img{
opacity:1.0;
left: 0px;
position:absolute;
top: 0px;
-moz-transition: all 1s ease-in-out;
-webkit-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
width: 180px;
height: 45px;
background: transparent;
padding: 5px;
border: solid 1px gray;
border-radius:5px;
}
Con este array intento:
1.- Que pasen cuatro fotos cada cuatro segundos
2.- Que a cada fotografia que pase se le asigne un enlace previo del segundo array es decir el "array_url"
3.- Que las fotografias tengan algo de opacidad a iniciarse


Problemas que me surgen:
1.- Si valido la pagina el codigo html me indica que
Código HTML:
name="funcionimagen"
no es valido y que debo cambiarlo por id="funcionimagen", con id no me rotan las imagenes.

2.- Los enlaces del array_url que le asigno a cada imagen no funcionan o se confunden con otros enlaces de la pagina o no funcionan.

3.- No funcionan la opacidad de las fotografias.


Ruego algo de ayuda se me han acabado las ideas
  #2 (permalink)  
Antiguo 14/05/2014, 05:16
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema con un array

He estado mirando y me funciona en firefox pero en internet explorer me derror al cargar la linea 83
Código:
 window.document["funcionimagen"].src = array_imagen[contador].src
tampoco me funciona en chrome
  #3 (permalink)  
Antiguo 14/05/2014, 05:23
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con un array

Código HTML:
Ver original
  1. <body onload="alternar_imagen()">
  2.   <a href="" id="imglink"><img src="melacion.jpg" id="funcionimagen" alt="cambio de imagen"></a>

En la función:

Código Javascript:
Ver original
  1. var img = document.getElementById("funcionimagen");
  2.     img.src = "Aquí la nueva imagen";
  3.     var link = document.getElementById("imglink");
  4.     link.href = "Aquí el nuevo href";

Lo de las transiciones deberás preguntar en el foro de CSS
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 14/05/2014, 07:23
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema con un array

El codigo html lo entiendo perfectamente

Código:
 <a href="" id="imglink"><img src="melacion.jpg" id="funcionimagen" alt="cambio de imagen"></a>
pero con el codigo javasscript no se si te refieres a esto si es asi no funciona, solo aparece una imagen con su enlace correspondiente. No cambia cada cuatro segundos
Código:
<script>
//creo array de imágenes
array_imagen = new Array(4)
array_imagen[0] = new Image(180,45) 
array_imagen[0].src = "1.jpg"
array_imagen[1] = new Image(180,45) 
array_imagen[1].src = "2.jpg"
array_imagen[2] = new Image(180,45)
array_imagen[2].src = "3.jpg"
array_imagen[3] = new Image(180,45)
array_imagen[3].src = "4.jpg"
//creo el array de URLs
array_url = new Array(4)
array_url[0] = "iones.html"
array_url[1] = "acivil.html"
array_url[2] = "salida.html"
array_url[3] = "civil.html"
//variable para llevar la cuenta de la imagen siguiente
contador = 0
//función para rotar el banner
function alternar_imagen(){
	var img = document.getElementById("funcionimagen");
        img.src = "1.jpg";
        var link = document.getElementById("imglink");
        link.href = "civil.html";
	var img = document.getElementById("funcionimagen");
        img.src = "2.jpg";
        var link = document.getElementById("imglink");
        link.href = "salida.html";
	var img = document.getElementById("funcionimagen");
        img.src = "3.jpg";
        var link = document.getElementById("imglink");
        link.href = "frecivil.html";
	var img = document.getElementById("funcionimagen");
        img.src = "4.jpg";
        var link = document.getElementById("imglink");
        link.href = "aasalida.html";
    window.document["funcionimagen"].src = array_imagen[contador].src
    window.document.links[0].href = array_url[contador]
    contador ++
    contador = contador % array_imagen.length
    setTimeout("alternar_imagen()",4000)
} 
</script>
  #5 (permalink)  
Antiguo 14/05/2014, 07:25
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Problema con un array

El problema que refieres de que se "confunden los enlaces" tiene que ver con que las imagenes siguen rotando pero el navegador coje un enlace cuando te colocas sobre la imagen.

Esto se solucionaria deteniendo la rotacion cuando te colocas sobre la imagen (onmouseover) y reanudandola cuando sales de ella (onmouseout)


Aca la solucion a ese problema en especial (probado):

Código Javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4.     <title>Rotación de banners con Javascript</title>  
  5. <script>
  6.  
  7. var estado = true;
  8.  
  9. //creo array de imágenes
  10. array_imagen = new Array(4)
  11. array_imagen[0] = new Image(120,60)
  12. array_imagen[0].src = "images/lentejas.jpg"
  13. array_imagen[1] = new Image(120,60)
  14. array_imagen[1].src = "images/plato-presentado.jpg"
  15. array_imagen[2] = new Image(120,60)
  16. array_imagen[2].src = "images/Salsa-de-cebolla-con-tomate.jpg"
  17. array_imagen[3] = new Image(120,60)
  18. array_imagen[3].src = "images/compuesto-de-varias-frutas.jpg"
  19.  
  20. //creo el array de URLs
  21. array_url = new Array(4)
  22. array_url[0] = "http://www.cocina.com"
  23. array_url[1] = "http://www.elgurmet.com/"
  24. array_url[2] = "https://www.google.com.co/search?q=cocinando"
  25. array_url[3] = "http://www.culinario.net"
  26.  
  27. //variable para llevar la cuenta de la imagen siguiente
  28. contador = 0
  29.  
  30. //función para rotar el banner
  31. function alternar_banner()
  32. {
  33.     var timer
  34.    
  35.     console.log('Estado es '+estado)
  36.    
  37.     if (estado)
  38.     {
  39.         window.document["banner"].src = array_imagen[contador].src
  40.         window.document.links[0].href = array_url[contador]
  41.         contador ++
  42.         contador = contador % array_imagen.length
  43.         timer = setTimeout("alternar_banner();",1500)
  44.     }else
  45.         clearTimeout(timer)
  46. }
  47.  
  48.                // cross-browser
  49.         function addEventHandler(elem,eventType,handler)
  50.         {
  51.             if (elem.addEventListener)
  52.                 elem.addEventListener (eventType,handler,false);
  53.             else
  54.                 if (elem.attachEvent) elem.attachEvent ('on'+eventType,handler);
  55.         }
  56.        
  57.         // cross-browser
  58.         function removeEventHandler(elem,eventType,handler)
  59.         {      
  60.             if (elem.removeEventListener)
  61.                 elem.removeEventListener (eventType,handler,false);
  62.                
  63.             if (elem.detachEvent)
  64.                 elem.detachEvent ('on'+eventType,handler);
  65.         }
  66.        
  67.         // Mis handlers
  68.         function handlerFunction1() {estado=false;}
  69.         function handlerFunction2() { estado=true;alternar_banner(); }
  70.                
  71.        
  72.         function init() {      
  73.             addEventHandler(document.getElementById('imagen'),'mouseover',handlerFunction1);  // desactiva rotacion
  74.            
  75.             addEventHandler(document.getElementById('imagen'),'mouseout',handlerFunction2);  // activa rotacion
  76.            
  77.             alternar_banner();         
  78.         }
  79.    
  80. </script>
  81. </head>
  82.  
  83. <body onload="init();">
  84.  
  85. <a href=""><img src="" name="banner" width=120 height=60 border=0 id="imagen" ></a>
  86.  
  87.  
  88. </body>
  89. </html>

Logicamente necesitas las imagenes que aparecen ahi y en el path en que sean accesibles (en mi caso las puse en ./images)
__________________
Salu2!

Última edición por Italico76; 14/05/2014 a las 13:40
  #6 (permalink)  
Antiguo 14/05/2014, 16:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con un array

Amigo, era solo un ejemplo y creí que quedabla más o menos claro:

Código Javascript:
Ver original
  1. function alternar_imagen(){
  2.     var img = document.getElementById("funcionimagen");
  3.     img.src = array_imagen[contador].src;
  4.     var link = document.getElementById("imglink");
  5.     link.href = array_url[contador];
  6.     // Revisa la forma en que incrementas el contador
  7.     contador ++;
  8.     contador = contador % array_imagen.length;
  9.     setTimeout("alternar_imagen()",4000);
  10. }

Por cierto, eso de no poner punto y coma al final de cada sentencia te debería generar un error.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 14/05/2014, 16:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Problema con un array

Cita:
Iniciado por Triby Ver Mensaje
Por cierto, eso de no poner punto y coma al final de cada sentencia te debería generar un error.
Compa : el punto y coma al final de cada sentencia en opcional en JS pero ayuda a la legibilidad y le facilita las cosas al interprete como comentan aqui

Creo que los que pasamos mucho tiempo en PHP, C, C++ ...etc no podemos con la costumbre!


---
PD: en otros lenguajes como Python el (;) no se utiliza tampoco pero se apoya en una identacion forzosa tambien para simplificarle la vida al pobre interprete
__________________
Salu2!
  #8 (permalink)  
Antiguo 14/05/2014, 17:18
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con un array

Cierto, "en teoría" son opcionales, sin embargo:

Cita:
There's been a lot of debate over semicolons in JavaScript. Semicolons aren't required due to the nature of JavaScript's automatic semicolon insertion, but they've been been considered a best practice for years.
Para evitar errores, es mejor especificar por uno mismo donde acaba una sentencia y no dejar que el motor intente adivinarlo.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 14/05/2014, 20:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Problema con un array

@Triby: sobre el tema de los (;) quiero agregar un comentario final:

Código Javascript:
Ver original
  1. if (condicion)
  2.     instruccion   // se ejecuta condicional (bien)

pero..

Código Javascript:
Ver original
  1. if (condicion);
  2.     sentencia   // se ejecuta siempre (mal)
y

Código Javascript:
Ver original
  1. if (condicion);
  2.    sentencia   // se ejecuta siempre (mal)
  3. else // <<< cuack! error!  
  4.    sentencia

O sea.. un (;) mal puesto es lo mismo que en PHP por mencionar otro lenguaje, que hace la estructura de control quede "trunca" (se corte en ese punto)
__________________
Salu2!

Etiquetas: funcion, html, variable
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 05:31.