У меня есть эта простая логика jquery. Как мне преобразовать ее в чистый javascript?
Кроме того, я должен использовать этот код в React с Typescript.
Я понятия не имею, с чего начать, к сожалению. Любая помощь будет чрезвычайно признательна.
$('.counting').each(function() {
var $this = $(this),
countTo = $this.attr('data-count');
$({ countNum: $this.text()}).animate({
countNum: countTo
},
{
duration: 3000,
easing:'linear',
step: function() {
$this.text(Math.floor(this.countNum));
},
complete: function() {
$this.text(this.countNum);
//alert('finished');
}
});
});
Я преобразовал это до запуска функции анимации.
let counting = document.querySelectorAll(".counting");
let countingArray = Array.prototype.slice.call(counting);
countingArray.forEach((el) => {
let countTo = el.getAttribute("data-count");
//start animate...
Я сослался на этот код в https://codepen.io/shvvffle/pen/JRALqG
Функция анимации для вас:
function animate(render, from, to, duration, timeFx) {
let startTime = performance.now();
requestAnimationFrame(function step(time) {
let pTime = (time - startTime) / duration;
if (pTime > 1) pTime = 1;
render(from + (to - from) * timeFx(pTime));
if (pTime < 1) {
requestAnimationFrame(step);
}
});
}
render
— функция обратного вызова, с помощью которой вы ожидаете обновить новые значения;from
и to
— начальные значения и целевые значения вашей анимации;duration
— продолжительность анимации во времени в миллисекундах;timeFx
— временная функция от [0, 1] до [0, 1].Вы можете использовать его как:
countingArray.forEach((el) => {
let countTo = el.getAttribute("data-count");
animate(function(newValue) {
el.innerText = Math.floor(newValue);
}, 0, countTo, 3000, x => x);
});
боже мой!!! Оно работает!!!! спасибо большое!!!! :))