Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.03.2015, 10:27
Аспирант
Отправить личное сообщение для kolhoz Посмотреть профиль Найти все сообщения от kolhoz
 
Регистрация: 04.03.2015
Сообщений: 92

Анимация при прокрутке
Есть некий блок:

<div class="row">
	<div id="year"></div>
	<div id="students"></div>
	<div id="worked"></div>
</div>

<script>
$('#year').animate({ year: 15/* - начало */ }, {
    duration: 2000,
    step: function (year){
        this.innerHTML = (year).toFixed(0)
    }
});

$('#students').animate({ students: 5000/* - начало */ }, {
    duration: 2000,
    step: function (students){
        this.innerHTML = (students).toFixed(0)
    }
});

$('#worked').animate({ worked: 1000/* - начало */ }, {
    duration: 2000,
    step: function (worked){
        this.innerHTML = (worked).toFixed(0)
    }
});
</script>


В этом блоке происходит увеличение заданных чисел. Как сделать так чтобы увеличение происходило только когда при прокрутке страницы этот блок станет видимым? Можно пример небольшой?
Ответить с цитированием
  #2 (permalink)  
Старый 04.03.2015, 12:09
Аспирант
Отправить личное сообщение для kolhoz Посмотреть профиль Найти все сообщения от kolhoz
 
Регистрация: 04.03.2015
Сообщений: 92

никто не подскажет?
Ответить с цитированием
  #3 (permalink)  
Старый 04.03.2015, 12:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

kolhoz,
getBoundingClientRect
Ответить с цитированием
  #4 (permalink)  
Старый 04.03.2015, 12:57
Аспирант
Отправить личное сообщение для kolhoz Посмотреть профиль Найти все сообщения от kolhoz
 
Регистрация: 04.03.2015
Сообщений: 92

А можно пример как это сделать? Почитал про getBoundingClientRect но не понял как применить к моему случаю
Ответить с цитированием
  #6 (permalink)  
Старый 04.03.2015, 15:01
Аспирант
Отправить личное сообщение для kolhoz Посмотреть профиль Найти все сообщения от kolhoz
 
Регистрация: 04.03.2015
Сообщений: 92

Пробую так, но все равно анимация начинается сразу при загрузке страницы и к моменту прокрутки до блока заканчивается. Как исправить?

<script>
window.onscroll = function() {
var pageY = window.pageYOffset || document.documentElement.scrollTop;
		$('#year').animate({ year: 15/* - начало */ }, {
			duration: 5000,
			step: function (year){
				this.innerHTML = (year).toFixed(0)
			}
		});

		$('#students').animate({ students: 5000/* - начало */ }, {
			duration: 5000,
			step: function (students){
				this.innerHTML = (students).toFixed(0)
			}
		});

		$('#worked').animate({ worked: 1000/* - начало */ }, {
			duration: 5000,
			step: function (worked){
				this.innerHTML = (worked).toFixed(0)
			}
		});

  }
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 04.03.2015, 15:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от kolhoz
Как исправить?
почитать примеры в 5 посте - и подумать - наверно должно быть какое то условие -- если елемент виден - в вашем коде этого нет
Ответить с цитированием
  #8 (permalink)  
Старый 04.03.2015, 16:15
Аспирант
Отправить личное сообщение для kolhoz Посмотреть профиль Найти все сообщения от kolhoz
 
Регистрация: 04.03.2015
Сообщений: 92

я плохо знаю jquery, а сейчас руки не доходят чтобы подучить. Не подскажете какое условие прописать? У меня из-за другой работы сейчас нет времени читать что-то по js
Ответить с цитированием
  #9 (permalink)  
Старый 05.03.2015, 08:15
Аспирант
Отправить личное сообщение для kolhoz Посмотреть профиль Найти все сообщения от kolhoz
 
Регистрация: 04.03.2015
Сообщений: 92

Как прописать условие, что блок row видим в браузере?
Ответить с цитированием
  #10 (permalink)  
Старый 05.03.2015, 08:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Запуск счётчика в блоке, когда блок станет видимым
kolhoz,

любые варианты были у вас перед глазами
макет по второй ссылке пост 5
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  div{
        height: 50px;
        margin: 400px 0;
        border: 1px dotted gray;
    }

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
     $(function(){


	//"самописный" селектор выбирает все элементы на экране, между "верхом" и "низом"
	//(горизонтаьная прокрутка не учитывается, но можно дописать по-аналогии)
	(function(){
		$.belowthefold = function(element) {
			var fold = $(window).height() + $(window).scrollTop();
			return fold <= $(element).offset().top;
		};

		$.abovethetop = function(element) {
			var top = $(window).scrollTop();
			return top >= $(element).offset().top + $(element).height();
		};

		$.inviewport = function(element) {
			return !$.belowthefold(element) && !$.abovethetop(element);
		};

		$.extend($.expr[':'], {
			"inViewport": function(a){return $.inviewport(a);}
		});
	})()
   var timer = 0 ,
	handler = function(){
		//var inViewportList = $('div:inViewport');  //набор элементов, видимых в окне браузера
		//делайте с ними что хотите
		//ваш код
        	$('#year:inViewport').animate({ year: 15/* - начало */ }, {
			duration: 5000,
			step: function (year){
				this.innerHTML = (year).toFixed(0)
			}
		});

		$('#students:inViewport').animate({ students: 5000/* - начало */ }, {
			duration: 5000,
			step: function (students){
				this.innerHTML = (students).toFixed(0)
			}
		});

		$('#worked:inViewport').animate({ worked: 1000/* - начало */ }, {
			duration: 5000,
			step: function (worked){
				this.innerHTML = (worked).toFixed(0)
			}
		});

	};


handler();

//вызывает "handler" с задержкой (500 мс) после "каждого скролла"
//если успел прокрутить дальше, то обрабатывается только "второй скролл" и т.д.
//очень удобно - меньше вычислений - меньше нагрузка на браузер
$(window).scroll(function(){
	if(timer){
		clearTimeout(timer);
		timer = 0;
	}
	timer = setTimeout(handler, 500);
});

});


  </script>

</head>

<body>


<div id='year'></div>
<div id='students'></div>
<div id='worked'></div>

</body>

</html>

Последний раз редактировалось рони, 05.03.2015 в 08:58.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фиксирование блока при прокрутке страницы и его "остановка" по достижению "футера" ilyakor jQuery 3 19.09.2014 16:52
fadeOut при прокрутке к концу страницы piraids Элементы интерфейса 2 20.06.2014 13:17
Как зафиксировать ячейки th при прокрутке таблицы по вертикали pavenko_sv jQuery 3 16.12.2013 16:39
Появляющаяся/исчезающая кнопка при прокрутке страницы MailRes Элементы интерфейса 2 22.06.2011 11:49
Баг при прокрутке грида posta ExtJS 0 17.06.2011 14:18