Анимированное увеличение числа
Здравствуйте. Помогите пожалуйста, сделать так, чтобы ниже приведенный скрипт увеличивал число анимированно (чтобы цифры крутились будто счетчик).
<div class="num">1000</div>
let nums = [1249, 1327, 1632];
let secs = [3, 5, 9];
const delay = sec => new Promise(r => setTimeout(r,sec*1000) );
(async () => {
for (let i = 0; i < secs.length; i++) {
await delay(secs[i]);
document.querySelector('.num').textContent = nums[i];
}
})();
|
Цитата:
|
фейковый счётчик с анимацией
Lefseq,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<div class="num">1000</div>
<script>
let nums = [1249, 1327, 1632];
let secs = [3, 5, 9];
let pause = 3000;
const elem = document.querySelector('.num');
const anim = (i, r) => {
let d = performance.now(),
from = +elem.textContent,
to = nums[i],
duration = secs[i] * 1000;
requestAnimationFrame( function e(b) {
b = (b - d) / duration;
1 <= b && (b = 1);
let c = from + (to - from) * b | 0;
elem.innerHTML = c;
b == 1 && setTimeout(r,pause);
1 > b && requestAnimationFrame(e)
})
}
const delay = i => new Promise(r => anim(i, r));
(async () => {
for (let i = 0; i < secs.length; i++) {
await delay(i);
}
})();
</script>
</body>
</html>
|
Цитата:
|
Lefseq,
??? |
рони,
Мне нужно чтобы вот так: https://codepen.io/Mr_Sergo/pen/WNNoYvK?editors=1010 Но появление чисел с анимацией. |
Цитата:
|
Lefseq,
что такое анимация, можно пример? |
Цитата:
|
Lefseq,
чем анимация из поста #3 отличается от вашего примера? |
Цитата:
Мне нужно, чтобы сначала через 3 секунды число дошло до 1249, затем остановилось, потом через 5 сек дошло до значения 1327... остановилось, затем через 9 сек до 1632. |
Цитата:
https://javascript.ru/forum/showthread.php?p=514372 |
Цитата:
Также в вашем варианте если отложить по времени запуск последующего числа, то оно "крутится" медленнее, а надо чтобы "крутились" все числа с одной скоростью. |
Цитата:
|
Цитата:
let nums = [1249, 1327, 1632]; let secs = [3, 5, 9]; |
Цитата:
Цитата:
|
Цитата:
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<div class="num">1000</div>
<script>
let nums = [1249, 1327, 1632];// до какого числа анимировать
let secs = [3, 5, 9];//сколько времени будет длится анимация
let pause = [3000, 7000, 0 ]; //пауза, после которой, запустится следущаяя анимация
const elem = document.querySelector('.num');
const anim = (i, r) => {
let d = performance.now(),
from = +elem.textContent,
to = nums[i],
duration = secs[i] * 1000;
requestAnimationFrame( function e(b) {
b = (b - d) / duration;
1 <= b && (b = 1);
let c = from + (to - from) * b | 0;
elem.innerHTML = c;
b == 1 && setTimeout(r,pause[i]);
1 > b && requestAnimationFrame(e)
})
}
const delay = i => new Promise(r => anim(i, r));
(async () => {
for (let i = 0; i < secs.length; i++) {
await delay(i);
}
})();
</script>
</body>
</html>
|
рони,
Да, то что нужно. Спасибо. Рони, а можете еще сделать, чтобы отчет начинался не с 1000, а с нуля? И чтобы этот первый отчет запускался не сразу после захода на страницу а через 5 секунд, а последующие через, 10 и 15? |
Lefseq,
:-?
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<div class="num"></div>
<script>
let nums = [0, 1249, 1327, 1632];// до какого числа анимировать
let secs = [0, 3, 5, 9];//сколько времени будет длится анимация
let pause = [5, 10, 15, 0 ]; //пауза, после которой, запустится следущаяя анимация
const elem = document.querySelector('.num');
const anim = (i, r) => {
let d = performance.now(),
from = +elem.textContent,
to = nums[i],
duration = secs[i] * 1000;
requestAnimationFrame( function e(b) {
b = (b - d) / duration;
1 <= b && (b = 1);
let c = from + (to - from) * b | 0;
elem.innerHTML = c;
b == 1 && setTimeout(r,pause[i] * 1000);
1 > b && requestAnimationFrame(e)
})
}
const delay = i => new Promise(r => anim(i, r));
(async () => {
for (let i = 0; i < secs.length; i++) {
await delay(i);
}
})();
</script>
</body>
</html>
|
рони,
Отлично! Это то что мне нужно было. Спасибо большое. |
рони,
Вы не поможете еще одну вещь сделать в данном скрипте? Надо чтобы скрип выдавал не целые числа: 1249, 1327, 1632, а числа с остатком: 1249.23, 1327.04, 1632.17 |
Lefseq,
let c = from + (to - from) * b; elem.innerHTML = c.toFixed(2); |
Цитата:
|
| Часовой пояс GMT +3, время: 04:38. |