18.01.2024, 21:55
|
Интересующийся
|
|
Регистрация: 18.01.2024
Сообщений: 21
|
|
Счетчик для четырех цифр
Доброго времени суток.
Необходима помощь по созданию функции на Java Script
В HTML есть 4 div
<div class="unit__index" data-val="300" id="unit-one">0</div>
<div class="unit__index" data-val="17" id="unit-two">0</div>
<div class="unit__index" data-val="200" id="unit-three">0</div>
<div class="unit__index" data-val="100" id="unit-four">0</div>
Мне нужно написать функцию на Java Script которая поможет создать счетчик цифр, но при этом для каждого числа отдельно
можно было задавать интервал и время вывода.
Для примера четыре числа которые нужно вывести (300, 17, 200, 100) но при этом итоговые цифры могут меняться
|
|
18.01.2024, 22:22
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Сообщение от MorenO410
|
но при этом для каждого числа отдельно
можно было задавать интервал и время вывода.
|
Вот про это поподробнее.
Какие интервалы? Имеется ли в виду, что время вывода может быть любым. Например, выводить начиная с 29.03.2024 18:30 в течении 18 часов. Или это времена только на время открытой страницы браузера.
Как они задаются?
|
|
19.01.2024, 11:48
|
Интересующийся
|
|
Регистрация: 18.01.2024
Сообщений: 21
|
|
voraa,
Интервал - имеется ввиду шаг счета чисел.
Например нужно сделать счетчик числа до 10 в котором задается шаг чисел
interval (шаг 1) - отсчет 0, 1 , 2, 3, 4.......10
interval (шаг 2) - отсчет 0 , 2, 4, 6.......10
interval (шаг 3) - отсчет 0 , 3, 6, 9
Думаю понятно объяснил
|
|
19.01.2024, 11:56
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Нет. Непонятно. Что означют эти числа? Что такое шаг1, что означают 0, 1, 2
Что такое шаг2
Какие блоки из первого поста должны при этом выводиться? И в какое время? Что здесь время вывода, и что интервал?
|
|
19.01.2024, 12:04
|
Интересующийся
|
|
Регистрация: 18.01.2024
Сообщений: 21
|
|
Шаг - это перебор чисел от 0 до необходимого числа.
Пример нужно просчитать итоговое число 10 с шагом 1.
То числа от 0 до 10 с шагом 1 будут считаться по счетчику следуюшим образом 0, 1, 2, 3, 4, 5 ,6 ,7, 8, 9 ,10
Либо же к примеру нужно просчитать итоговое число 10 с шагом 1
То числа от 0 до 10 с шагом 2 будут считаться по счетчику следуюшим образом 0, 2, 4, 6, 8, ,10
Либо же пускай шаг чисел для всех будет одинаковым, но 4 разных числа должны закончится одновременно в одно и тоже время.
Что-то вроде этого:
function digitsCounter() {
// Обнуление
if (document.querySelectorAll("[data-digits-counter]").length) {
document.querySelectorAll("[data-digits-counter]").forEach((element) => {
element.dataset.digitsCounter = element.innerHTML;
element.innerHTML = `0`;
});
}
// Функция инициализации
function digitsCountersInit(digitsCountersItems) {
let digitsCounters = digitsCountersItems
? digitsCountersItems
: document.querySelectorAll("[data-digits-counter]");
if (digitsCounters.length) {
digitsCounters.forEach((digitsCounter) => {
digitsCountersAnimate(digitsCounter);
});
}
}
// Анимация
function digitsCountersAnimate(digitsCounter) {
let startTimestamp = null;
const duration = parseInt(digitsCounter.dataset.digitsCounterSpeed)
? parseInt(digitsCounter.dataset.digitsCounterSpeed)
: 1000;
const startValue = parseInt(digitsCounter.dataset.digitsCounter);
const startPosition = 0;
const step = (timestamp) => {
if (!startTimestamp) startTimestamp = timestamp;
const progress = Math.min((timestamp - startTimestamp) / duration, 1);
digitsCounter.innerHTML = Math.floor(progress * (startPosition + startValue));
if (progress < 1) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
}
//Вызов инициализации без действия
digitsCountersInit();
}
digitsCounter();
Последний раз редактировалось MorenO410, 19.01.2024 в 12:53.
|
|
19.01.2024, 12:04
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
voraa,
условно в див ноль, каждую секунду это число увеличивается на шаг до указанного максимума.
<div class="unit__index" data-val="300" data-interval ="3">0</div>
|
|
19.01.2024, 12:26
|
Интересующийся
|
|
Регистрация: 18.01.2024
Сообщений: 21
|
|
Сообщение от рони
|
voraa,
условно в див ноль, каждую секунду это число увеличивается на шаг до указанного максимума.
<div class="unit__index" data-val="300" data-interval ="3">0</div>
|
Совершенно время. До указанного максимума или другими словами до указанного числа
Или же что-то вроде этого, но чтобы код отличался по написанию.
Условия чтобы четыре разных числа одновременного доходили до своего максимума (Пример 4 одновременных максимумов в 4 div (500, 300, 30, 8). Эти 4числа должны отчитаться так чтобы они пришли к своему максимуму одновременно В браузере они выводятся с плюсом (500+, 300+, 30+, 8+)
function animateCounter(element, attributeName) {
const value = parseInt(element.textContent);
const time = parseInt(element.getAttribute(attributeName)) || 1000;
let current = 0;
let start;
function updateCounter(timestamp) {
// !start ? start = timestamp : null
if (!start) start = timestamp;
const progress = timestamp - start;
const increment = value / time;
if (current < value) {
current += increment * (progress / 1000);
element.textContent = Math.floor(current);
requestAnimationFrame(updateCounter);
} else {
element.textContent = value;
}
}
requestAnimationFrame(updateCounter);
}
function setWidth(element) {
const width = element.offsetWidth;
element.style.minWidth = width + 4 + "px";
console.log(width);
return width;
}
window.onload = () => {
const counters = document.querySelectorAll("[data-counter]");
if (counters.length) {
counters.forEach(setWidth);
counters.forEach((element) => animateCounter(element, "data-counter"));
}
// document.querySelectorAll("[data-counter]").forEach(animateCounter)
};
Последний раз редактировалось MorenO410, 19.01.2024 в 12:52.
|
|
19.01.2024, 12:32
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Сообщение от рони
|
каждую секунду
|
Где до этого говорилось про секунду (а не про миллисекунду, минуту, час или сутки)?
Сообщение от MorenO410
|
document.querySelectorAll("[data-digits-counter]")
|
Где в первом посте элементы с data-digits-counter? Там только data-val= есть.
Вот я и пытаюсь выяснить точную постановку задачи.
|
|
19.01.2024, 12:34
|
Интересующийся
|
|
Регистрация: 18.01.2024
Сообщений: 21
|
|
Я привел как пример. Мой недочет
|
|
19.01.2024, 12:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
MorenO410,
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
|
|