Анимация чисел при прокрутке страницы 
		
		
		
		Здравствуйте, очень нужен небольшой скрипт анимации чисел при прокрутке страницы, ну например от 0 до 300. 
	Но при этом хотелось бы чтобы сама цифра ДО которой идет отсчет вводилась в html, а не в скрипте. Во нашел что то подобное, но там финальное число вводится в сам скрипт, а не в html http://jsfiddle.net/f48ZD/183/  | 
	
		
  | 
	
		
 Спасибо, но это не то, надо чтобы как в моем примере, человек прокручивает страницу до определенного дива и появляется число, которое быстро увеличивается (как в лендингах). 
	а в вашем оно просто увеличивается при прокрутке  | 
	
		
  | 
	
		
 https://jsfiddle.net/Homelux/8jkr53n6/ 
	вот сделал чтото похожее - но если несколько цифр на странице с одним классом, как тут http://demo.icetheme.com/?template=it_studio то СЧИАТЕТ БЕСКОНЕЧНО как поправить это можно?  | 
	
		
  | 
	
		
 Да, то что надо 
	Но при этом хотелось бы чтобы сама цифра ДО которой идет отсчет вводилась в html, а не в скрипте. Можно сделать чтобы в эту строку вместо нуля? <div class="number">0</div>  | 
	
		
  | 
	
		
 А как быть, если нужно увеличить одновременно 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>  | 
	
		
 
<!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>
 | 
	
		
 Спасибо за ответ и интересное решение!:thanks:  
	Но, нельзя ли даную задачу выполнить иначе, а именно изменив лишь код javascript? А с помощью css, может, только задать числам горизонтальное расположение, а не вертикальное как сейчас, то есть расположить их в одну строку.  | 
	
		
 анимация чисел в зоне видимости jquery 
		
		
		
		antonenkoab, 
	
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
   .number{
    float:  left;
    width: 100px;
    font-size: 22px;
    line-height: 44px;
    color: #FFFFFF;
    background-color: #8B4513;
    text-align: center;
    margin-right: 30px;
   }
  p{
    height: 2000px;
  }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
    var num = $(".number");
    num.each(function(indx, el) {
        var max = $(el).data("max");
        var duration = 5000;
        var visibility = checkViewport(el);
        $(el).on("animeNum", function() {
            $({n: 0}).animate({n: max}, {
                easing: "linear",
                duration: duration,
                step: function(now, fx) {
                    $(el).html(now | 0)
                }
            })
        }).data("visibility", visibility);
        visibility && $(el).trigger("animeNum")
    });
    function checkViewport(el) {
    var H = document.documentElement.clientHeight,
        h = el.scrollHeight,
        pos = el.getBoundingClientRect();
        return pos.top + h > 0 && pos.bottom - h < H
    }
    $(window).scroll(function() {
        num.each(function(indx, el) {
            var visibility = checkViewport(el);
            el = $(el);
            var old = el.data("visibility");
            old != visibility && el.data("visibility", visibility) && !old && el.trigger("animeNum")
        })
    })
});
  </script>
</head>
<body>
<p></p>
<div class="number" data-max="3">0</div>
<div class="number" data-max="40">0</div>
<div class="number" data-max="400">0</div>
<p></p>
</body>
</html>
 | 
	
		
 Здорово! Спасибо! :thanks:  Наверное таки следует изучать jquery :) .  
	А, все-таки, для приверженцев писать код на чистом javascript, как такое повторить без использования библиотек на подобие jquery?  | 
	
		
 Цитата: 
	
  | 
	
		
 Заметил. Я на пост №10 тоже писал комментарий. Извините, я наверное многого хочу. 
	 | 
	
		
 antonenkoab, 
	чем пост №10 не устроил?  | 
	
		
 Цитата: 
	
  | 
| Часовой пояс GMT +3, время: 15:03. |