Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.12.2015, 12:17
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

Анимация чисел при прокрутке страницы
Здравствуйте, очень нужен небольшой скрипт анимации чисел при прокрутке страницы, ну например от 0 до 300.

Но при этом хотелось бы чтобы сама цифра ДО которой идет отсчет вводилась в html, а не в скрипте.

Во нашел что то подобное, но там финальное число вводится в сам скрипт, а не в html

http://jsfiddle.net/f48ZD/183/
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2015, 13:02
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

https://jsfiddle.net/3tfd4z4n/
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2015, 13:13
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

Спасибо, но это не то, надо чтобы как в моем примере, человек прокручивает страницу до определенного дива и появляется число, которое быстро увеличивается (как в лендингах).

а в вашем оно просто увеличивается при прокрутке
Ответить с цитированием
  #4 (permalink)  
Старый 26.12.2015, 13:14
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

http://demo.icetheme.com/?template=it_studio

вот например
Ответить с цитированием
  #5 (permalink)  
Старый 26.12.2015, 14:39
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

https://jsfiddle.net/Homelux/8jkr53n6/

вот сделал чтото похожее - но если несколько цифр на странице с одним классом, как тут

http://demo.icetheme.com/?template=it_studio

то СЧИАТЕТ БЕСКОНЕЧНО

как поправить это можно?
Ответить с цитированием
  #6 (permalink)  
Старый 26.12.2015, 23:35
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

https://jsfiddle.net/3tfd4z4n/1/
Ответить с цитированием
  #7 (permalink)  
Старый 27.12.2015, 08:42
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

Да, то что надо

Но при этом хотелось бы чтобы сама цифра ДО которой идет отсчет вводилась в html, а не в скрипте.

Можно сделать чтобы в эту строку вместо нуля?

<div class="number">0</div>

Последний раз редактировалось Ingener, 27.12.2015 в 08:46.
Ответить с цитированием
  #8 (permalink)  
Старый 27.12.2015, 09:43
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

https://jsfiddle.net/3tfd4z4n/2/
Ответить с цитированием
  #9 (permalink)  
Старый 02.01.2017, 17:10
Новичок на форуме
Отправить личное сообщение для antonenkoab Посмотреть профиль Найти все сообщения от antonenkoab
 
Регистрация: 02.01.2017
Сообщений: 5

А как быть, если нужно увеличить одновременно 3 разных числа?
Например, изменив предыдущий пример таким образом:

HTML:
<div class="number" data-max="3">0</div>
<div class="number" data-max="40">0</div>
<div class="number" data-max="400">0</div>
Ответить с цитированием
  #10 (permalink)  
Старый 02.01.2017, 20:18
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>Document</title>
		<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
	</head>
	<body>
		<div class="scrolling">
			<p>Крути вниз!</p>
			<div class="number" data-max="30"></div>
			<div class="number" data-max="450"></div>
			<div class="number" data-max="7500"></div>
			<div class="number" data-max="1000000"></div>
		</div>

		<style>
			
html {
	text-align: center;
	--angle: 5deg;
	background: linear-gradient(calc(180deg + var(--angle)), transparent 47%, #f5f5f5 50%, transparent 0) 0 0,
				linear-gradient(calc(180deg - var(--angle)), transparent 47%, #f5f5f5 50%, transparent 0) 100% 0;
	background-size: 50% 8em;
	background-repeat: repeat-y;
}

body {
	margin: 0;
}

.scrolling {
	overflow: auto;
	height: 100vh;
}

.number {
	font: 3em sans-serif;
	margin: 25em auto;
}

.number::after {
	background: rebeccapurple;
	color: white;
	border-radius: 50%;
	padding: 2em;
	counter-reset: number var(--value);
	content: counter(number);
}
			
		</style>
		<script>
			
{
	let inTheView = Symbol.for("inTheView");
	let multiplier = Symbol.for("multiplier");
	
	// Создадим новое событие, которое выстреливает, когда счётчик становится видимым
	
	for(let element of document.querySelectorAll(".scrolling")) {
		element.addEventListener("scroll", event => {
			for(let numberElement of element.querySelectorAll(".number")) {
				let y = (element.scrollTop - numberElement.offsetTop + element.offsetHeight) / (element.offsetHeight);
				let isInTheView = y > 0 && y < 1;
				
				if(numberElement[inTheView] !== isInTheView) {
					numberElement[inTheView] = isInTheView;
					
					if(isInTheView)
						numberElement.dispatchEvent(new Event("number:visible", { bubbles: true }));
				}
			}
		});
	}
	
	// обработка нового события
	addEventListener("number:visible", event => {
		loop.call(event.target);
		console.log(event.target[inTheView]);
	});
	
	// анимация цифр запускается, когда срабатывает новое событие
	function loop() {
		if(this[multiplier] === 1) {
			this[multiplier] = null;
			return;
		};
		
		if(typeof this[multiplier] !== "number") {
			this[multiplier] = 0;
			this["dateStart"] = performance.now();
		}
		
		this[multiplier] = Math.min((performance.now() - this.dateStart) / 750, 1);
		this.style.setProperty("--value", (this[multiplier] * this.getAttribute("data-max") | 0));
		
		requestAnimationFrame(loop.bind(this));
	}
};
		</script>
	</body>
</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появление/исчезновение элемента при прокрутке страницы JQuery 0leg9 Общие вопросы Javascript 37 21.09.2017 07:41
Загрузка "хвоста" страницы при прокрутке из внешних файлов. Begoian Events/DOM/Window 10 23.01.2014 19:53
Прижимание блока при прокрутке страницы byFahrenheit Общие вопросы Javascript 2 14.01.2013 14:03
Фиксация объекта при скрулинге страницы Pashok(one) Общие вопросы Javascript 10 08.01.2013 02:52
Случайное число при перезагрузке страницы logi Общие вопросы Javascript 8 21.10.2011 15:47