Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   setInterval заставить работать в цикле, как? (https://javascript.ru/forum/events/54239-setinterval-zastavit-rabotat-v-cikle-kak.html)

piraids 10.03.2015 13:42

setInterval заставить работать в цикле, как?
 
Как верно заставить работать setInterval в цикле? пробую вот так - не получается:

var a = 2,
    auto = {};

for(i=0; i<a; i++){
 auto[i] = setInterval(
  function(i){ 
   console.log('a='+i); 
  }(i)
  , 3000);
}


так сразу в консоль выдает значения, без интервалов

а так работают интервалы, но i всегда = 2 :
a = 2;
auto = {};

for(i=0; i<a; i++){
 auto[i] = setInterval(function(){ console.log('a='+i); }, 3000);
}

Skipp 10.03.2015 15:47

Обычно, когда задают такой вопрос, ответ заключается в логике задачи, которую вы скорее всего не правильно поняли.

Так вот, вопрос, зачем вам это? А точнее для чего такая конструкция?

piraids 10.03.2015 16:23

У меня есть несколько блоков, визуально и по конструкции они идентичны, отличимы только содержимым, мне необходимо для каждого из блоков задать свой интервал - с разным временным значением, и своими параметрами в функции, которая вызывается в интервале.

вот хотел это все засунуть в цикл, чтобы меньше было кода

потому как дублируется все, за исключением id блока, времени интервала и пары параметров для функции

Skipp 10.03.2015 17:45

Попробуйте разобрать это и почитайте про замыкания.
<html>
	<head>
		<style>
			div {
				width: 50px;
				height: 50px;
				float: left;
				margin: 2px;
				background-color: #000000;
			}
		</style>
	</head>
	<body>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<script type="text/javascript">
			var elements		= document.getElementsByTagName('div'),
				options			= [
					{
						height		: 80,
						speed		: 100
					},
					{
						height		: 120,
						speed		: 200
					},
					{
						height		: 30,
						speed		: 300
					},
					{
						height		: 60,
						speed		: 500
					},
					{
						height		: 10,
						speed		: 400
					},
					{
						height		: 40,
						speed		: 600
					},
					{
						height		: 70,
						speed		: 700
					}
				],
				changeHeight 	= function(element, height) {
					element.offsetHeight == height ? element.style.height = '50px' : element.style.height = height + 'px';
				};
			
			for(var i = 0; i < elements.length; i++)
				(function(j){
					setInterval(function() {
						changeHeight(elements[j], options[j]['height']);
					}, options[j]['speed']);
				})(i);
		</script>
	</body>
</html>

piraids 10.03.2015 18:24

Skipp,
спасибо, я не так вызывал анонимную функцию емае((( понял, остальное все как у Вас, работает.


Часовой пояс GMT +3, время: 09:30.