2013-04-26 5 views
9

Sto cercando di incrementare un numero all'interno di un elemento nella pagina. Ma ho bisogno che il numero includa una virgola per il millesimo valore. (Ad esempio 45.000 non 45000)Come incrementare il numero usando l'animazione con la virgola usando jQuery?

<script> 
// Animate the element's value from x to y: 
    $({someValue: 40000}).animate({someValue: 45000}, { 
     duration: 3000, 
     easing:'swing', // can be anything 
     step: function() { // called on every step 
      // Update the element's text with rounded-up value: 
      $('#el').text(Math.round(this.someValue)); 
     } 
    }); 
</script> 
<div id="el"></div> 

Come posso incrementare un numero utilizzando animare con una virgola?

+0

Date un'occhiata a questo http://stackoverflow.com/questions/7327046/jquery-number-formatting –

+0

Vorrei memorizzare il numero in un attributo dati, quindi mostrare la versione in formato virgola del numero nell'elemento. Quando lo si incrementa, basta aumentare la versione dei dati e sostituire la versione formattata. –

+0

Questo potrebbe aiutarti - http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

risposta

38

lavoro Demohttp://jsfiddle.net/4v2wK/

Sentitevi liberi di cambiare più per il vostro bisogno, si può anche guardare al formattatore di valuta, spero che questo si adatta al vostro bisogno :)

Codice

// Animate the element's value from x to y: 
    var $el = $("#el"); //[make sure this is a unique variable name] 
    $({someValue: 40000}).animate({someValue: 45000}, { 
     duration: 3000, 
     easing:'swing', // can be anything 
     step: function() { // called on every step 
      // Update the element's text with rounded-up value: 
      $el.text(commaSeparateNumber(Math.round(this.someValue))); 
     } 
    }); 

function commaSeparateNumber(val){ 
    while (/(\d+)(\d{3})/.test(val.toString())){ 
     val = val.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); 
    } 
    return val; 
    } 

** output * enter image description here

+0

qualche idea sul perché il numero non sia lo stesso? Sto prendendo in considerazione il cerchio attorno all'output. –

+0

Hiya @AdrianFlorescu umm come intendi, mi dispiace non so cosa stai chiedendo? ":)" intendi perché l'output non è detto per esempio: 44.444? come questo: http://jsfiddle.net/hVpqD/ –

+0

@Tats_innit esattamente, ma sembra che questo sia dovuto ai passaggi animati. Ho sostituito il valore completo con il valore originale. complete: function() { where.text (endNr); } http://jsfiddle.net/5yBt8/10/ –

10

Si dovrebbe anche aggiungere una funzione completa in quanto tale:

step:function(){ 
    //.. 
}, 
complete:function(){ 
    $el.text(commaSeparateNumber(Math.round(this.someValue))); 
} 

Aggiornato Fiddle: Demo

+0

Perché? Sono abbastanza sicuro che la funzione 'step' verrà chiamata anche all'ultimo passo dell'animazione. La funzione 'completa' viene utilizzata per allegare una richiamata da eseguire dopo aver completato tutti i passaggi. – Bungle

+0

A volte non mostrava un buon risultato finale, era casuale alla fine, a volte 45000, a volte 4995 e così via, quindi ho aggiunto questa funzione, e ora funziona perfettamente. Grazie! –

Problemi correlati