No se incrementa variable global enJavaScript

Iniciado por Riki_89D, 25 Diciembre 2010, 15:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Riki_89D

Hola amigos/as como estan?¿

antes que nada desearles una Feliz navidad :)

Bien,a lo que iva,el caso es que tengo una variable global (declarada fuera de las funciones en javascript),y tengo 2 funciones,una que llama a setInterval y este llama a otra fucnion (funcion que teoricamente debe incrementar la variable global,esa variable global es el tiempo del Interval)

queda asin:

Código (javascript) [Seleccionar]

<script lenguage="javascript">
var Contador = 200;
var i = 100;
function Animate()
{
var i+=10;
Contador+=2;
var Objeto = document.getElementById("Imagen");
Objeto.style.width = Contador+'px';

}
function Start()
{
setInterval("Animate()",i);

}


la variable "i" no se incrementa,"i" es el tiempo del intervalo,y si se icrementase el intervalo deberia ser mas lasrgo cada vez no?¿

alguna idea?


saludos :D

bizco

estas declarando 2 variables "i", la que esta fuera de la funcion y la que esta dentro.

Riki_89D

Hola amigo,dentro de la funcion tambien lo probe sin el "var" osea solo con la "i" pero nada,no incrementa

Spider-Net

#3
La función setInterval el problema que tiene es que creo que la variable con la que la inicialices es el valor que tomará como intervalo constante, y no puede cambiar, creo que podrías hacer eso mismo con SetTimeout(), algo así:

Código (javascript) [Seleccionar]
<script lenguage="javascript">
var Contador = 200;
var i = 100;

function Animate(){
i+=100;
Contador+=2;
document.write(Contador+'px - '+i);
Start();
}

function Start(){
setTimeout('Animate()', i);
}

Start();
</script>


Obviamente cambia el document.write por tu función, yo puse el document.write simplemente para probarlo y funciona perfectamente.

Riki_89D

Pero setTimeOut solo se ejecuta una ves no?¿

Spider-Net

#5
Si, pero si pruebas el código que te he puesto verás que hace lo que querías. setTimeout se ejecuta una vez, pero si lo llamas cada vez que ejecutas tu función consigues el efecto que buscabas. Si lo haces con setInterval, el intervalo es constante y no se consigue ese efecto.

Riki_89D

Hola spider,la verdad si funciona el codigo,i ma so menos hace lo que quiero peor nedesitaria que fuera un pco mas suave la animacion,me esta costando bastante,en otro hilo me dieron un lenace peor no me acabo de enterar mucho,este es el code que tengo acutalmente:
Código (javascript) [Seleccionar]

<script lenguage="javascript">
var Velocidad = 1;

function Animar()
{
Velocidad+=3;
Objeto = document.getElementById("Imagen");
var Ancho = parseInt(Objeto.style.width);
Ancho+=21;
Objeto.style.width =Ancho+30+'px';
Start_Animate();
}

function Start_Animate()
{
setTimeout("Animar()",Velocidad);
}

</script>



`pongo un IF tmb para que cuando llege al ancho deseado se pare,pero hay2  cosas que no entiendo,como ago para que el ancho se mueva de ambos lados?¿ es que el ancho siempre se mueve por la parte derecha del DIV nunca pro la izquierda pòr que?¿ i lo otr como pueod hacer para que sea mas suave?¿


saludos

Riki_89D

Hola de nuevo,bueno ya consegui hacer exactamente el efecto que queria :D

aqui os dejo un pequeño ejemplo que hice,es una tonteria,es mas que nada el efecto que buscava y porfin lo hice:

http://webriki.260mb.com/Easyng.html

por si a alguien le interesa el codigo aqui se lo dejo,de todas formas abran codigos mucho mas profesionales que el mio eso esta claro.

Código (javascript) [Seleccionar]

<script lenguage="javascript">
var Incremento = 30;
var Tiempo;
var Incremento2 = 10;
var Tiempo2;
function Animar()
{
Incremento--;
if(Incremento == 0)
{
Start_Animate2();
clearTimeout(Tiempo);
}
else
{
Objeto = document.getElementById("Imagen");
var Ancho = parseInt(Objeto.style.width);
Objeto.style.width =Ancho+Incremento+'px';
Start_Animate();
}
}

function Start_Animate()
{
Tiempo = setTimeout("Animar()",20);
}





function AnimteHeight()
{
Incremento2--;
if(Incremento2 == 0)
{
clearTimeout(Tiempo2);
}
else
{
Objeto2 = document.getElementById("Imagen");
var Ancho2 = parseInt(Objeto.style.height);
Objeto2.style.height =Ancho2+Incremento2+'px';
Start_Animate2();
}
}


function Start_Animate2()
{
Tiempo2 = setTimeout("AnimteHeight()",20);
}
function Cambia()
{
obj = document.getElementById("Imagen").style.borderColor="white";
document.bgColor="black";
setTimeout("Start_Animate()",500);
}

</script>


podria aerme ahorrado la creacion de ciertas variables pero bueno eso para cuando lo haga para algun proyecto :)


nada de esto ubiera sido posible sin muchos de aquios lo agradezco amigos :)


saludos y feliz año nuevo :)


Spider-Net

Antes que nada enhorabuena Riki_89D por el efecto, porque te ha quedado realmente bien, bastante suave y eficaz, lo único que como ya has dicho yo puliría un poco el código para optimizarlo pero enhorabuena porque has conseguido un buen efecto sin usar frameworks.

Por cierto, como consejo, te diría que te acostumbres a identar tu código porque cuando es corto quizás no haya problemas, pero cuando son cada vez más largos tendrás más problemas para encontrar errores y demás, y además, con un código bien tabulado facilitarás la lectura del mismo a otros programadores y a ti mismo en un futuro.

Un saludo.

Riki_89D

Hola Spider-Net,ok tienes razon,pulire el code e intentare ser algo mas organizado xd,bueno lo consegui gracias a bosotro :) soys los mejores :)

muchisimas gracias pro todo y gracias pro el consejo,creeme que lo seguire :D siempre hay que aprender de los demas,yo aprendo de bosotros :)


saludos y feliz año a todos/as