На странице указана цена 126 рублей 00 копеек. Нужно эту цену каждую минуту увеличивать на 1 рубль. И также в течение минуты должны увеличиваться копейки, которые показывают, что цена растет. Как это можно реализовать? Если с рублями все понятно, используем setInterval и через каждые 60000мс пребавляем 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>
Нужно заякорить момент во времени(начало отсчёта) и связать его с ценой.
Потом можно часто вызывать функцию пересчёта, и обновлять цену, в зависимости от пройденного от начала времени.
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>
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>
Используйте оператор % - остаток от деления:
Тест (ускорен):
var x=0
setInterval(function(){
x++
console.log(x%100)
},60000/1000)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей