Как сделать эффект растущей цены (на подобие таймера)?

490
07 февраля 2017, 22:11

На странице указана цена 126 рублей 00 копеек. Нужно эту цену каждую минуту увеличивать на 1 рубль. И также в течение минуты должны увеличиваться копейки, которые показывают, что цена растет. Как это можно реализовать? Если с рублями все понятно, используем setInterval и через каждые 60000мс пребавляем 1, то с копейками не могу сообразить.

Answer 1

Решение с неточным таймером.

var price = 126.00; 
 
updatePrice = function() { 
  document.getElementById("price").innerHTML = XFormatPrice(price); 
  price+=(100/60)/100; 
} 
 
updatePrice(); 
 
setInterval(updatePrice, 1000); 
 
function XFormatPrice(_number)  
{ 
    var format_string = '# руб.'; 
  
    var r=parseFloat(_number) 
  
    var exp10=Math.pow(10,2); 
    r=Math.round(r*exp10)/exp10; 
  
    rr=Number(r).toFixed(2).toString().split('.'); 
  
    b=rr[0].replace(/(\d{1,3}(?=(\d{3})+(?:\.\d|\b)))/g,"\$1"+' '); 
  
    r=(rr[1]?b+ ',' +rr[1]:b); 
    return format_string.replace('#', r); 
}
<div id="price"></div>

Answer 2

Нужно заякорить момент во времени(начало отсчёта) и связать его с ценой.
Потом можно часто вызывать функцию пересчёта, и обновлять цену, в зависимости от пройденного от начала времени.

var costEl = document.getElementById('cost'); 
var velocity = 1/60; // рубль в минуту 
 
var start = Date.now(); 
var startCost = parseFloat(costEl.innerText); 
 
setInterval(function(){ 
  var now = Date.now(); 
  var secs = (now - start) / 1e3; 
  var newCost = (startCost + secs*velocity).toFixed(2); 
  costEl.innerText = newCost; 
}, 100);
<span id="cost">100.00</span>

Answer 3

var velocity = 100; 
setInterval(function(){ 
  var h = $('#hundredths').text(); 
  var r = $('#roubles').text(); 
  if(++h == 100){ 
    h = 0; 
    r++; 
  } 
   
  $('#hundredths').text((h < 10 ? '0' : '') + h); 
  $('#roubles').text(r); 
}, velocity);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
Цена, руб. <span id='roubles'>126</span>.<span id='hundredths'>00</span>

Answer 4

Используйте оператор % - остаток от деления:

Тест (ускорен):

var x=0 
 
setInterval(function(){ 
   x++ 
   console.log(x%100) 
},60000/1000)

READ ALSO
Как изменить функционал виджета datepicker-a в jQuery UI?

Как изменить функционал виджета datepicker-a в jQuery UI?

Использую виджет Datepicker из jQuery UI, там помимо выставления даты выставляю и времяВремя там выставляется ползунками

539
Не работает плагин onScreen

Не работает плагин onScreen

Использую плагин onScreen для смены фона при скролле внутри блока, на сайте плагина все работает: http://silvestrehgithub

515
Закрытие элемента по клику на кнопку

Закрытие элемента по клику на кнопку

Доброго времени суток, вообщем сложилась такая ситуация, есть 3 кнопки по нажатию на кнопку, открывается определенное поле формы, нужно чтобы...

516
Как сравнить две метки времени ЧЧ:ММ?

Как сравнить две метки времени ЧЧ:ММ?

В JS есть переменная var a = '14:35', значение a изменяется динамически, она получает времяНадо сравнить со временем браузера, время браузера это...

639