| 
	| 
	
	| 
		
	| 
			
			 
			
				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,777
					 
		
 |  |  
	| 
	
 
	| Сообщение от 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,777
					 
		
 |  |  
	| Нет. Непонятно. Что означют эти числа? Что такое шаг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,150
					 
		
 |  |  
	| 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,777
					 
		
 |  |  
	| 
	
 
	| Сообщение от рони |  
	| каждую секунду |  
	
 Где до этого говорилось про секунду (а не про миллисекунду, минуту, час или сутки)?
 
	
 
	| Сообщение от 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,150
					 
		
 |  |  
	| MorenO410, 
 Пожалуйста, отформатируйте свой код!
 
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
 
[html run]
... минимальный код страницы с вашей проблемой
[/html]
 
О том, как вставить в сообщение исполняемый javascript и html-код , а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting . |  |  |  |