Foros del Web » Programando para Internet » Javascript »

Imágenes que cambien cada segundo

Estas en el tema de Imágenes que cambien cada segundo en el foro de Javascript en Foros del Web. Hola a tod@s, Estoy intentando programar una aplicación que muestre una imagen cada segundo y he llegado a algo así: Código: <html> <head> <title>Imagenes que ...
  #1 (permalink)  
Antiguo 11/04/2015, 17:33
 
Fecha de Ingreso: enero-2015
Mensajes: 12
Antigüedad: 9 años, 3 meses
Puntos: 0
Imágenes que cambien cada segundo

Hola a tod@s,

Estoy intentando programar una aplicación que muestre una imagen cada segundo y he llegado a algo así:

Código:
<html>
<head>
<title>Imagenes que cambian cada cierto tiempo</title>
<script language="JavaScript">
var i=1;
setTimeout("cambio()",1000);
function cambio() {
   if(i==1) {
      document.write("<img src='imagen1.png'>");
      i=i+1;
   }
   else if (i==2) {
      document.write("<img src='imagen2.png'>");
      i=i+1; 
   }
   else if (i==3) {
      document.write("<img src='imagen3.png'>");
      i=1; 
   }
   setTimeout("cambio()",1000);
}
</script>
</head>
<body onload="cambio()">
</body>
</html>
Sin embargo, sólo me muestra la primera imagen y no va mostrando las otras dos cada segundo que pasa.
¿Alguien sabe cuál puede ser el error y cómo solucionarlo? Quiero hacerlo así porque pretendo utilizar esta estructura para mostrar otro tipo de elementos (que vaya apareciendo cada segundo la temperatura de las principales ciudades de España).

Muchas gracias por vuestra ayuda ;)
  #2 (permalink)  
Antiguo 11/04/2015, 18:48
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 12 años, 8 meses
Puntos: 5
Respuesta: Imágenes que cambien cada segundo

Hola prueba con setInterval ya que setTimeout solo se ejecuta una vez.
  #3 (permalink)  
Antiguo 11/04/2015, 21: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: Imágenes que cambien cada segundo

Lo que tratas de hacer es algo conocido como slider o carrusel de imágenes. Lo probé tal y como lo pones (sustituyendo los nombres de las imágenes) y pude ver a las tres imágenes, sin embargo, se van generando una tras otra, llegando a llenar la pantalla.

Te propongo otra manera de hacerlo:

Código HTML:
Ver original
  1. <img src = "imagen1.png" class = "slider_img" />
  2. <img src = "imagen2.png" class = "slider_img" />
  3. <img src = "imagen3.png" class = "slider_img" />

Código CSS:
Ver original
  1. .slider_img{
  2.     opacity: 0;
  3.     transition: .15s;
  4.     position: absolute;
  5. }

Código Javascript:
Ver original
  1. var imagenes = document.querySelectorAll(".slider_img"),
  2.     total = imagenes.length,
  3.     contador = 0,
  4.     slider = function(){
  5.         imagenes[contador].style.opacity = 0;
  6.         contador = contador == total - 1 ? 0 : ++contador;
  7.         imagenes[contador].style.opacity = 1;
  8.     };
  9.  
  10. imagenes[contador].style.opacity = 1;
  11. setInterval(slider, 1000);

Lo que hago es lo siguiente. Primero, en el documento HTML, tengo tres imágenes, cada una con la clase 'slider_img'. En una hoja de estilos, tengo una clase 'slider_img' la cual establece opacidad nula (no se ve) al elemento al que se le aplica, además una posición absoluta (para que las imágenes se superpongan una sobre otra) y un efecto de transición de 15 centésimas de segundo. Esto último es para darle un efecto de cambio suave al cambio de opacidad que haré con el código JS.

En el archivo JS, tomo a todos los elementos que poseen la clase 'slider_img', el total que estos representan, una variable contadora para llevar un control sobre todas las imágenes y una función, sobre la cual explicaré más adelante. Antes de ejecutas la función, tomo al elemento de imagenes equivalente al valor de contador (que inicialmente tiene el valor 0, por lo tanto, tomaré al primer elemento de contador) y le doy 1 como valor de opacidad (lo hago visible). Luego de esto, establezco un temporizador cíclico que ejecutará la función slider cada 1000 milésimas de segundo o 1 segundo.

En la función, tomo al elemento de imagenes equivalente al valor actual de contador y le asigno 0 como opacidad (lo hago invisible), luego, actualizo el valor de la variable contadora de acuerdo a una condición: Si el valor de contador es igual al total de elementos de imagenes menos uno, es decir, la última posición de dicha lista de nodos, entonces, habremos llegado al final y tenemos que reiniciar el ciclo, por lo cual le asigno el valor cero, caso contrario, aumento su valor en uno.

Finalmente, tomo a la imagen equivalente al valor actualizado de la variable contadora y la hago visible.

DEMO

P.D.: No olvides colocar este código después del último elemento del documento y justo antes de la etiqueta </body>, de otro modo, no surtirá 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; 12/04/2015 a las 09:21 Razón: Posdata
  #4 (permalink)  
Antiguo 12/04/2015, 04:44
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años
Puntos: 1
Respuesta: Imágenes que cambien cada segundo

Hola amigos.

En mi opinión la solución es tan fácil como hacer una cascada de funciones, condicionadas por el famoso setTimeout para la ejecución en serie.

Veamos.

Pongamos que queremos realizar un programa en el que participen 5 imágenes, y cada una sustituya a la anterior cada 2 segundos.


Hacemos la cascada de funciones, y llamamos a la primera al cargar la página con el comando "onload='funcion1()'"


Las imágenes se llamarán:

imagen1.jpg
imagen2.jpg
imagen3.jpg
imagen4.jpg
imagen4.jpg

Y estarán alojadas en la misma dirección del *.html para no tener que escribir más caracteres. Cuestión de vaguería, je, je...

La imagen estará identificada mediante un "id". Llamémosle id=imagen. en la primera función no es necesario definir qué imagen va ubicada en dicho contenedor dado que es la que tenemos por defecto, no obstante indicaremos dicha definición mediante un imagen.src="imagen1.jpg"

Haremos una cascada de funciones denominadas

primera()
segunda()
tercera()
cuarta()
quinta()

La función primera sería algo así:

t=0;
function primera(){

imagen.src="imagen1.jpg"

t=t+1;

if(t>=2){segunda();t=0;return}

setTimeout('primera()',1000)
}

La función primera() se ejecutará durante 2000 milisegundos (2 segundos). Pasado este tiempo se cortará el bucle mediante el condicional "if" y se ejecutará segunda(). Ponemos la variable contador "t" a cero para utilizarla en la próxima función.


function segunda(){

imagen.src="imagen2.jpg"

t=t+1;

if(t>=2){tercera();t=0;return}

setTimeout('segunda()',1000)
}

En esta función la imagen imagen1.jpg se ha cambiado a imagen2.jpg. Su permanencia será igualmente de 2 segundos. Entonces pasaremos a la tercera función y con ella a la imagen imagen3.jpg


function tercera(){

imagen.src="imagen3.jpg"

t=t+1;

if(t>=2){cuarta();t=0;return}

setTimeout('tercera()',1000)
}

La cuarta será un clon de las anteriores, cambiando los parámetros de imagen y función.

Llegamos a la quinta. Será idéntica a las anteriores, con la particularidad de que llamaremos a la primera función al finalizar el bucle



function quinta(){

imagen.src="imagen5.jpg"

t=t+1;

if(t>=2){primera();t=0;return}

setTimeout('quinta()',1000)
}

Código HTML:
Ver original
  1.  
  2. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  3. <title>cambio de imagen cada 2 segundos</title>
  4. </head>
  5. <script language=javascript>
  6.  
  7. t=0;
  8. function primera(){
  9. imagen.src="imagen1.jpg"
  10. t=t+1;
  11. if(t>=2){segunda();t=0;return}
  12. setTimeout('primera()',1000)
  13. }
  14.  
  15. function segunda(){
  16. imagen.src="imagen2.jpg"
  17. t=t+1;
  18. if(t>=2){tercera();t=0;return}
  19. setTimeout('segunda()',1000)
  20. }
  21.  
  22.  
  23. function tercera(){
  24. imagen.src="imagen3.jpg"
  25. t=t+1;
  26. if(t>=2){cuarta();t=0;return}
  27. setTimeout('tercera()',1000)
  28. }
  29.  
  30. function cuarta(){
  31. imagen.src="imagen4.jpg"
  32. t=t+1;
  33. if(t>=2){quinta();t=0;return}
  34. setTimeout('cuarta()',1000)
  35. }
  36.  
  37. function quinta(){
  38. imagen.src="imagen5.jpg"
  39. t=t+1;
  40. if(t>=2){primera();t=0;return}
  41. setTimeout('quinta()',1000)
  42. }
  43.  
  44. <body onload="primera()">
  45.  
  46. <div style="position: absolute; width: 100px; height: 100px; z-index: 1; left: 192px; top: 47px" id="capa1">
  47.     <table border="1" width="100%" id="table1">
  48.         <tr>
  49.             <td>
  50.             <img border="0" src="imagen1.jpg" width="300" height="300" id=imagen></td>
  51.         </tr>
  52.     </table>
  53. </div>
  54.  
  55. </body>
  56.  
  57. </html>
  #5 (permalink)  
Antiguo 12/04/2015, 12:09
 
Fecha de Ingreso: enero-2015
Mensajes: 12
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Imágenes que cambien cada segundo

Muchas gracias a los 3 por vuestras respuestas ;)

Os comento, voy a 'simplificar' un poco la parte de código que me está dando la lata para facilitar el problema.

Yo tengo esto:

Código:
<html>
<head>
<script language="JavaScript">
var variable=1;
function cambio() {
   document.write(variable);
   variable=variable+1;
   var t = setInterval(cambio,1000);
}
</script>
</head>
<body onload="cambio()">
</body>
</html>
Básicamente, lo que quiero (el esqueleto de mi duda, no lo voy a ampliar más) es que me muestre una especie de contador y que cada número cambie por el siguiente cada segundo: que primero aparezca el 1, al segundo siguente el 2, después el 3,...
De esta forma, sólo me escribe el 1 y hace la asignación del 2 a la variable pero no hace el setInterval para que se repita el proceso cada segundo. Además, si saco el setInterval de la función, ya no me lo coge tampoco.

Quiero hacerlo así (siempre que se pueda, claro) porque lo tengo orientado para poder hacer una aplicación aún mayor (olvidémonos de las imágenes y de comandos relacionados con minutos, segundos, etc.).

Perdonad las molestias y muchas gracias de nuevo por vuestra colaboración ;)
  #6 (permalink)  
Antiguo 12/04/2015, 13:03
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años
Puntos: 1
Respuesta: Imágenes que cambien cada segundo

Cita:
Iniciado por programaWeb Ver Mensaje
Muchas gracias a los 3 por vuestras respuestas ;)

Os comento, voy a 'simplificar' un poco la parte de código que me está dando la lata para facilitar el problema.

Yo tengo esto:

Código:
<html>
<head>
<script language="JavaScript">
var variable=1;
function cambio() {
   document.write(variable);
   variable=variable+1;
   var t = setInterval(cambio,1000);
}
</script>
</head>
<body onload="cambio()">
</body>
</html>
Básicamente, lo que quiero (el esqueleto de mi duda, no lo voy a ampliar más) es que me muestre una especie de contador y que cada número cambie por el siguiente cada segundo: que primero aparezca el 1, al segundo siguente el 2, después el 3,...
De esta forma, sólo me escribe el 1 y hace la asignación del 2 a la variable pero no hace el setInterval para que se repita el proceso cada segundo. Además, si saco el setInterval de la función, ya no me lo coge tampoco.

Quiero hacerlo así (siempre que se pueda, claro) porque lo tengo orientado para poder hacer una aplicación aún mayor (olvidémonos de las imágenes y de comandos relacionados con minutos, segundos, etc.).

Perdonad las molestias y muchas gracias de nuevo por vuestra colaboración ;)
La línea var t = setInterval(cambio,1000); tiene un error de sintaxis

La función "cambio" debe terminar con paréntesis en modo cambio(), y además estar encerrada entre comillas, de esta forma

var t = setInterval("cambio()",1000);

De otra forma no esperes que te funcione. Es más, seguramente la página te dará error en dicha línea.

El document.write(variable) no rula ya que con esta línea deshaces toda la página actual, y se pierde el valor de la variable. En su lugar puedes colocar un innerText en la forma siguiente.

Código Javascript:
Ver original
  1. variable=1;
  2. function cambio(){
  3. contador.innerHTML=variable;
  4.  
  5.    variable=variable+1;
  6. setInterval('cambio()',1000);
  7. }

Claro que para que sea efectivo deberás colocar el correspondiente identificador en la una etiqueta tipo span

Código Javascript:
Ver original
  1. [HIGHLIGHT="HTML"]<p><span id=contador> </span></p>
[/HIGHLIGHT]

La página completa sería:

Código HTML:
Ver original
  1.  
  2. <meta http-equiv="Content-Language" content="es">
  3. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  4. <title>Contador</title>
  5. </head>
  6. <script language="JavaScript">
  7. variable=1;
  8. function cambio(){
  9. texto.innerHTML=variable;
  10.  
  11.    variable=variable+1;
  12. setInterval('cambio()',1000);
  13. }
  14.  
  15. </head>
  16. <body onload="cambio()">
  17.  
  18. <p><span id=texto> </span></p>
  19.  
  20. </body>
  21.  
  22. </html>

Si la cargas en tu explorador observarás que el contador funciona.

Un saludo.
  #7 (permalink)  
Antiguo 12/04/2015, 16:18
 
Fecha de Ingreso: enero-2015
Mensajes: 12
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Imágenes que cambien cada segundo

Muchas gracias, todo (casi) perfecto. El único problema que queda ahora es que primero se muestra el 1 (bien), después el 2 (bien) pero después el 4 (mal), el 8 (mal),...
Es decir, primero suma 1, luego suma 2, luego suma 4,... cuando siempre debería sumar 1 (variable=variable+1).

Resulto esto, ya estará todo perfecto.
  #8 (permalink)  
Antiguo 12/04/2015, 17: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: Imágenes que cambien cada segundo

Cita:
Iniciado por luisceb Ver Mensaje
La línea var t = setInterval(cambio,1000); tiene un error de sintaxis

La función "cambio" debe terminar con paréntesis en modo cambio(), y además estar encerrada entre comillas, de esta forma

var t = setInterval("cambio()",1000);

De otra forma no esperes que te funcione. Es más, seguramente la página te dará error en dicha línea.
Eso no es en realidad exacto. El método setIntertval puede recibir como primer parámetro una función anónima o el nombre de una función, ya sea entrecomillado y con los paréntesis a la derecha o simplemente el nombre, sin comillas ni paréntesis.

Código Javascript:
Ver original
  1. //Función anónima
  2. setInterval(function(){
  3.     //Instrucciones
  4. }, 1000);
  5.  
  6. //Nombre entrecomillado de una función
  7. setInterval("nombreFuncion()", 1000);
  8.  
  9. //Nombre sin comillas de una función
  10. setInterval(nombreFuncion, 1000);

Antes de hacer una aseveración así, al menos debiste de haber probado.

Cita:
Iniciado por luisceb Ver Mensaje
El document.write(variable) no rula ya que con esta línea deshaces toda la página actual, y se pierde el valor de la variable.
Eso tampoco es cierto. El método write solo interactúa con el DOM, mas no con las variables del código. Son dos cosas completamente distintas.

Cita:
Iniciado por programaWeb Ver Mensaje
[...]que me muestre una especie de contador y que cada número cambie por el siguiente cada segundo: que primero aparezca el 1, al segundo siguente el 2, después el 3[...]
La idea del rotador de imágenes que te mostré, te sirve perfectamente para esto. Solo tenías que pensar un poco más.

Código Javascript:
Ver original
  1. var i = 0, limite = 3, span = document.querySelector("#id del span");
  2. setInterval(function(){
  3.     i = i == limite ? 1 : ++i;
  4.     span.innerHTML = i;
  5. }, 1000);

DEMO

Si deseas que se ejecute automáticamente al cargar la página, coloca todo el código debajo de todos los elementos del documento y justo antes de la etiqueta </body>.

Y solo por si a caso, la línea número 3 utiliza operadores ternarios, que son una alternativa al clásico bloque if-else y funcionan de la siguiente manera:

Código Operadores ternarios:
Ver original
  1. condición ? verdadero : falso

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 12/04/2015, 19:00
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Imágenes que cambien cada segundo

Cita:
Iniciado por Alexis88 Ver Mensaje
Eso no es en realidad exacto. El método setIntertval puede recibir como primer parámetro una función anónima o el nombre de una función, ya sea entrecomillado y con los paréntesis a la derecha o simplemente el nombre, sin comillas ni paréntesis.
Eso tampoco es en realidad exacto

El método acepta una función o una cadena con código, obviamente poco recomendado (aka 'eval is evil'): https://developer.mozilla.org/en-US/...nterval#Syntax

Saludos
__________________
Grupo Telegram Docker en Español
  #10 (permalink)  
Antiguo 12/04/2015, 19:12
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: Imágenes que cambien cada segundo

¿Y qué parte de lo que dije no es exacta?

No hice exclusiones ni implícitas ni explícitas, por eso no dije algo como "SOLO puede recibir como primer parámetro...". Lo otro, bueno, el mismo manual lo explica.

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
  #11 (permalink)  
Antiguo 13/04/2015, 00:39
 
Fecha de Ingreso: abril-2015
Ubicación: Bogotá D.C - Colombia
Mensajes: 106
Antigüedad: 9 años
Puntos: 11
Respuesta: Imágenes que cambien cada segundo

Hola esta es una solución sencilla usando Jquery, puedes usar cualquier versión....


<script type="javascript">

$(document).ready(function(){
var intervalChangeImage = setInterval(changeImage,1000) ;
var posImage = 0;
var images = ["URLIMAGEN1","URLIMAGEN2","URLIMAGEN3","URLIMAGEN4 ","URLIMAGEN5"]
function changeImage(){
$('img#imageForChange').attr('src',images[posImage]);
}
});

</script>

<img id="imageForChange" />


La desventaja es que si las imagenes son muy pesadas al realizarse el primer cambio puede que la imagen se demore en aparecer por que estás haciendo una precarga...

Te recomendaría que cargues las imagenes en otras etiquetas <img src="url" style="display:none"/> ocultas para que el navegador las almacene en el caché.. :D

Última edición por jhonjaider1000; 13/04/2015 a las 00:45
  #12 (permalink)  
Antiguo 13/04/2015, 08:52
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Imágenes que cambien cada segundo

Cita:
Iniciado por Alexis88 Ver Mensaje
¿Y qué parte de lo que dije no es exacta?

No hice exclusiones ni implícitas ni explícitas, por eso no dije algo como "SOLO puede recibir como primer parámetro...". Lo otro, bueno, el mismo manual lo explica.

Saludos
Cita:
Iniciado por Alexis88 Ver Mensaje
El método setIntertval puede recibir como primer parámetro una función anónima o el nombre de una función
Es muy distinto, el nombre de una función a un string de código (que bien puede ser algo sin ninguna función), por lo menos a mi parecer.
__________________
Grupo Telegram Docker en Español
  #13 (permalink)  
Antiguo 13/04/2015, 09:05
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: Imágenes que cambien cada segundo

No interpretaste bien lo que dije. Fíjate en el contexto en el cual estamos debatiendo, es decir, el nombre de una función como primer parámetro del temporizador. Nadie menciona la ejecución de una línea de código literal o la de una cadena que no sea el nombre de una función.
__________________
«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
  #14 (permalink)  
Antiguo 13/04/2015, 09:22
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Imágenes que cambien cada segundo

Solo comentaba que lo que escribiste no era exacto, sin contexto, en general.
__________________
Grupo Telegram Docker en Español
  #15 (permalink)  
Antiguo 13/04/2015, 09:26
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: Imágenes que cambien cada segundo

Y yo insisto en que te equivocas. El nombre de una función nombrada puede se pasado como primer parámetro ya sea de manera literal, sin comillas ni paréntesis, o con ellos. Dudo mucho que eso sea algo "inexacto".

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
  #16 (permalink)  
Antiguo 13/04/2015, 10:01
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Imágenes que cambien cada segundo

No me equivoco, ni tu. Solo que a lo que me refería que el parámetro no es sólo el nombre de una función, si no una string con código.

Saludos
__________________
Grupo Telegram Docker en Español
  #17 (permalink)  
Antiguo 13/04/2015, 10:33
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Imágenes que cambien cada segundo

Voy a hacer de intermediario

Cita:
Iniciado por Carlangueitor Ver Mensaje
No me equivoco, ni tu. Solo que a lo que me refería que el parámetro no es sólo el nombre de una función, si no una string con código.
Me he leído todo el post y según he entendido, @Alexis88 ya había aclarado ese punto anteriormente:

Cita:
Iniciado por Alexis88 Ver Mensaje
El método setIntertval puede recibir como primer parámetro una función anónima o el nombre de una función, ya sea entrecomillado ─es decir, como string─ y con los paréntesis a la derecha o simplemente el nombre, sin comillas ni paréntesis ─como función─.
  #18 (permalink)  
Antiguo 13/04/2015, 10:41
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: Imágenes que cambien cada segundo

Charly, ya había dicho que estábamos debatiendo bajo el contexto del nombre de una función. Creo que eso está más claro que el robo del Real al Aleti en la final de la Champions.

En tal caso, hubieras puesto lo que dices como un agregado a la explicación en lugar de decir que lo que dije no es exacto. Eso hubiera tenido más sentido, en especial porque no hice exclusiones (para lo cual hubiera tenido que utilizar términos como: solo, solamente, entre otros, cosa que no fue así).

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
  #19 (permalink)  
Antiguo 13/04/2015, 13:19
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años
Puntos: 1
Respuesta: Imágenes que cambien cada segundo

Cita:
Iniciado por programaWeb Ver Mensaje
Muchas gracias, todo (casi) perfecto. El único problema que queda ahora es que primero se muestra el 1 (bien), después el 2 (bien) pero después el 4 (mal), el 8 (mal),...
Es decir, primero suma 1, luego suma 2, luego suma 4,... cuando siempre debería sumar 1 (variable=variable+1).

Resulto esto, ya estará todo perfecto.
Cambia setInterval por setTimeout y problema resuelto.

Desconozco porqué ocurre, pero ocurre.

Entre tanto fiera de la programación, estoy seguro que algún forero tendrá la respuesta.
  #20 (permalink)  
Antiguo 13/04/2015, 14:12
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años
Puntos: 1
Respuesta: Imágenes que cambien cada segundo

Solucionado: como a cabezón no hay quien me gane, resolví el p. contador utilizando setInterval.

Resulta que la línea del setInterval tienes que colocarla fuera de la función. Si la alojas dentro los valores se duplican, y el contador es una m.

Una forma de resolverlo es colocando dicha línea de comando al cargar la página mediante un "onload"

<body onload="setInterval('cambio()',1000);">

Y la función cambio() quedaría así

Código Javascript:
Ver original
  1. variable=0;
  2. function cambio(){
  3.   variable=variable+1;
  4.  
  5. texto.innerHTML=variable;
  6.  
  7. }

Prueba ahora y verás que bien.

La página completa sería:

Código HTML:
Ver original
  1.  
  2.  
  3.  
  4.  
  5. <meta http-equiv="Content-Language" content="es">
  6.  
  7. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  8.  
  9. <title>Contador</title>
  10.  
  11. </head>
  12.  
  13. <script language="JavaScript">
  14.  
  15. variable=0;
  16. function cambio(){
  17.   variable=variable+1;
  18.  
  19. texto.innerHTML=variable;
  20.  
  21. }
  22.  
  23.  
  24.  
  25.  
  26.  
  27. </head>
  28.  
  29. <body onload="setInterval('cambio()',1000);">
  30.  
  31.  
  32.  
  33. <p><span id=texto> </span></p>
  34.  
  35.  
  36.  
  37. </body>
  38.  
  39.  
  40.  
  41. </html>
  #21 (permalink)  
Antiguo 13/04/2015, 15:03
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: Imágenes que cambien cada segundo

Cita:
Iniciado por luisceb Ver Mensaje
Solucionado[...]
El problema ya estaba resuelto, además, se te está olvidando asignar el <span> a texto.
__________________
«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
  #22 (permalink)  
Antiguo 14/04/2015, 00:50
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años
Puntos: 1
Respuesta: Imágenes que cambien cada segundo

Cita:
Iniciado por Alexis88 Ver Mensaje
El problema [URL="http://www.forosdelweb.com/f13/imagenes-que-cambien-cada-segundo-1125299/#post4699165"]ya estaba resuelto[/URL], además, se te está olvidando asignar el <span> a texto.
Perdona: estaba resuelto lo del contador, pero no el porqué se duplicaban los valores con setInterval.

Sobre mi olvido del span, no sé a qué te refieres, o bueno sí sé a que te refieres. Recuerda que he atribuido un identificador.

En vez de poner, como haces tú:

span.innerHTML

pongo:

texto.innerHTML

En este caso "texto" es el identificador del span

Si pones en marcha el código observarás que funciona, y al final de todo eso es lo que vale.

Entiendo que cada uno tenemos formas distintas de entender la solución. Por cierto que todavía no he probado tu código para ver si funciona.

Última edición por luisceb; 14/04/2015 a las 00:57
  #23 (permalink)  
Antiguo 14/04/2015, 01:55
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: Imágenes que cambien cada segundo

Cita:
Iniciado por luisceb Ver Mensaje
Perdona: estaba resuelto lo del contador, pero no el porqué se duplicaban los valores con setInterval.
Lo decía porque le dejé la solución final, por eso es que dije eso. Y probando tu solución, no se produce el efecto rotador del valor del contador, es decir, solo continúa aumentando. Digo esto por el enunciado original del problema.

Cita:
Iniciado por luisceb Ver Mensaje
Por cierto que todavía no he probado tu código para ver si funciona.
Ahí dejé un enlace como demostración.

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

Etiquetas: cada, html, segundo
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 23:52.