2012-09-07 21 views
12

Necesito "animar" una variable con jquery.jquery "animar" valor variable

Ejemplo: El valor de la variable es 1. El valor debe ser de 10 después de 5 segundos. Debe aumentar "sin problemas".

Espero que sepas a qué me refiero.

¡Gracias!

+0

¿Desea seguir incrementando esta variable después de un tiempo fijo? – Sibu

+0

Debe aumentar "sin problemas". Me olvidé de decirlo ... – Marv

+0

Tienes una solución elegante aquí http://stackoverflow.com/a/9324325/607874 –

Respuesta

11

Lo que se necesita es el parámetro de paso en elfunción.

var a = 1; 
jQuery('#dummy').animate({ /* animate dummy value */},{ 
    duration: 5000, 
    step: function(now,fx){ 
     a = 1 + ((now/100)*9); 
    } 
}); 

demo

+0

La solución está bien. El problema es que es muy lento. – Eru

+1

@Ties +1 Funciona, pero realmente no es necesario vincular la animación a un elemento HTML ficticio. Ver mi respuesta en http://stackoverflow.com/a/9324325/607874 –

+0

@JoseRuiSantos Sé que la respuesta que Sudhir dio es probablemente la mejor respuesta. – Ties

0

Uso setInterval:

percentage = 0; 
startValue = 1; 
finishValue = 5; 
currentValue = 1; 
interval = setInterval(function(){ 
    percentage ++; 
    currentValue = startValue + ((finishValue - startValue) * percentage)/100; 
    doSomething(currentValue); 
    if (percentage == 100) clearInterval(interval); 
}, duration/100) 

function doSomething(val) { /*process value*/} 
1
​var blub = 1; 
setTimeout(function() { 
    blub = 10; 
}, 5000); 
+0

¡Ahahahhahahahhahahahha, eso es tan divertido! +1 – super

0

incremento con setTimeout

x = 1 

for(i=0;i<1000;i+=100){ 
    setTimeout(function(){ 
    console.log(x++) 
    },i) 
} 
2

Esto debería funcionar para usted:

var a = 1; 
var b = setInterval(function() { 
    console.log(a); 
    a++; 
    if (a == 10) { clearInterval(b); } 
}, 500); 
+2

jup hizo un [violín] similar (http://jsfiddle.net/Fbhs9/2/) tenga en cuenta que el tiempo no será 100% exacto, pero eso podría no ser un gran problema según el caso :) – VDP

+1

genial :) Cambié los valores que parece :) – Eru

0

marca HTML como
HTML

<span id="changeNumber">1</span> 

Puede cambiar su valor después de 5 segundos.
JQuery:

setInterval(function() {   
     $('#changeNumber').text('10'); 
    },5000); 

He aquí una demostración http://jsfiddle.net/Simplybj/Fbhs9/

+0

en este ejemplo, puede usar mejor 'setTimeout'. Lo configura en 10 cada 5 segundos ahora ... (mientras que ya es 10) – VDP

+0

Debe aumentar "sin problemas". Me olvidé de decirlo ... – Marv

23

intento:

$({someValue: 0}).animate({someValue: 10}, { 
    duration: 5000, 
    step: function() { 
     $('#el').text(Math.ceil(this.someValue)); 
    } 
}); 

<div id="el"></div> 
+0

bueno, no sabía que pudieras hacerlo de esta manera, sabía acerca de la función de paso (como puedes ver en mi respuesta) ¡pero esto es bueno! elimina el 'Math.ceil' y estás dorado :) – Ties

+0

@Ties Math.ceil se usa en este caso para que se redondee al valor superior, de lo contrario obtendrías 9.99858544, etc. –

+2

sí, pero pierdes la suavidad , puede agregar un parámetro 'completo' para terminarlo – Ties

9

representation

var snail = {speed:0}; 
$(snail).animate({speed: 10}, 5000); 

demo

0

Como complemento a la respuesta de lazos, no es necesario agregar un elemento ficticio al DOM. Lo hago así:

$.fn.animateValueTo = function (value) { 

    var that = this; 

    $('<span>') 
     .css('display', 'none') 
     .css('letter-spacing', parseInt(that.text())) 
     .animate({ letterSpacing: value }, { 
      duration: 1000, 
      step: function (i) { 
       that.text(parseInt(i)); 
      } 
     }); 

    return this; 
};