Отсюда я использую скрипт jQuery. Пока что это отлично работает, но единственное, что меня интересует, - это то, как поставить запятую в одно из значений.
Поскольку число увеличивается при прокрутке, сложно заставить браузер проверить, что это за целое число, постфактум. Я прочитал кучу сообщений, в которых будет добавлена запятая (в данном случае я пытаюсь получить 100,000), но это не сработает, поскольку браузер изначально не видит это целое число (начинается с 0).
Вот сценарий, который я использую для вызова анимации при прокрутке страницы:
$(function () {
var fx = function fx() {
$(".stat-number").each(function (i, el) {
var data = parseInt(this.dataset.n, 10);
var props = {
"from": {
"count": 0
},
"to": {
"count": data
}
};
$(props.from).animate(props.to, {
duration: 500 * 1,
step: function (now, fx) {
$(el).text(Math.ceil(now));
},
complete:function() {
if (el.dataset.sym !== undefined) {
el.textContent = el.textContent.concat(el.dataset.sym)
}
}
});
});
};
var reset = function reset() {
console.info($(this).scrollTop())
if ($(this).scrollTop() > 950) {
$(this).off("scroll");
fx()
}
};
$(window).on("scroll", reset);
});
Он берет значение из атрибута данных data-n в HTML и затем волшебно работает оттуда. Если у меня есть 100,000 в атрибуте data-n, он прерывает его на 100, когда числа оживляются.
Так что да, я не уверен, нужно ли мне изменить этот скрипт, чтобы он мог учесть запятую в атрибуте данных, или есть что-то еще, что мне может понадобиться сделать постфактум?
@LucaKiebel - есть ли лучший способ вместо использования parseInit?
есть parseFloat, но 100.000 является 100, так что это не имеет особого значения
@LucaKiebel - Хорошо. Я использую не столько десятичную дробь. Это запятая. Данные, которые я получаю, - это 100,000. Я могу удалить запятую с помощью PHP, но затем, когда запускается анимация, число увеличивается до 100000 без запятой. Я не уверен, могу ли я использовать что-то другое, кроме parseInt, чтобы заставить его снова добавить эту запятую, или есть другой способ, которым мне нужно это сделать. Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хорошо, поэтому, покопавшись еще немного, я смог найти решение.
Я нашел это:
$.fn.digits = function(){
return this.each(function(){
$(this).text( $(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") );
})
}
а затем добавил дополнительный класс в свой HTML.
Затем я подключился к complete:function и добавил:
$(".class-i-added").digits();
до конца анимации.
В целом, это появляется, чтобы обеспечить результат, который я ищу. Поскольку мне нужно только приписать это к одному номеру (пока), он работает так, как должен.
Конечно, он обрежет все десятичные дроби, вы используете
parseInt