2013-04-26 3 views
9

Я пытаюсь увеличить число внутри элемента на странице. Но мне нужно, чтобы число включало запятую для значения тысячного места. (например, 45 000 не 45000)Как увеличить число, используя анимацию с запятой, используя 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> 

Как увеличить число, используя анимированный запятой?

+0

Посмотрите на эту http://stackoverflow.com/questions/7327046/jquery-number-formatting –

+0

Я бы сохранил номер в атрибуте данных, а затем отобразил версию номера в элементе с запятой. Когда вы увеличиваете его, просто увеличьте версию данных и замените форматированную версию. –

+0

Это может вам помочь - http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

ответ

38

Рабочая Демонстрационныйhttp://jsfiddle.net/4v2wK/

Вы можете изменить его больше для ваших потребностей, вы можете также смотреть на валютном форматировщиком, Надеюсь, что это будет соответствовать вашим потребностям :)

код

// 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; 
    } 

** вывод * enter image description here

+0

любая идея, почему число не то же самое? Я занимаюсь кругом вокруг выхода. –

+0

Hiya @AdrianFlorescu umm как вы имеете в виду, извините, не знаете, что вы спрашиваете? ':)' вы имеете в виду, почему вывод не говорит, например: 44,444? вот так: http://jsfiddle.net/hVpqD/ –

+0

@Tats_innit точно, но похоже, что это из-за анимированных шагов. Я заменил значение в полном исходном значении. complete: function() { where.text (endNr); } http://jsfiddle.net/5yBt8/10/ –

10

Вы также должны добавить полную функцию как таковую:

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

Обновлено Fiddle: Demo

+0

Почему? Я уверен, что функция «step» будет вызываться даже на последнем шаге анимации. Функция «complete» используется для присоединения обратного вызова для запуска после завершения всех шагов. – Bungle

+0

Иногда он не показывал хороший последний результат, он был случайным в конце, иногда 45000, иногда 4995 и т. Д., Поэтому я добавил эту функцию, и теперь она работает отлично. Благодаря! –

Смежные вопросы