Когда я запустил код, который вы указали, я попал в бесконечный цикл. В конце цикла do у вас есть
current_value = parseInt(numb);
но значение numb устанавливается только в начале функции, поэтому оно продолжается вечно. Если вы измените это на
current_value = parseInt($(id).html());
тогда все работает нормально. За исключением того, что, похоже, это происходит мгновенно.
Я взломал метод для достижения анимации с использованием тайм-аутов, который, кажется, работает довольно хорошо, но, поскольку я все еще довольно плохо знаком с javascript, я не знаю, есть ли более эффективный подход или нет. Просто настройте второй параметр, передаваемый setTimeout, чтобы получить желаемую скорость. И если вы хотите изменить значение увеличения / уменьшения, просто измените замедление на dir
.
function mod2(id, value) {
var numb = $(id).html();
var current_value = parseInt(numb);
// determine direction to go
var dir = 1;
if (current_value - value > 0) {
dir *= -1;
}
getThere(id, current_value, value, dir);
}
function getThere(id, current_value, target_value, dir) {
current_value += dir;
$(id).html(current_value);
if (current_value != target_value) {
setTimeout("getThere('"+id+"',"+current_value+","+target_value+","+dir+")", 10);
}
}