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); } |
Обычно, когда задают такой вопрос, ответ заключается в логике задачи, которую вы скорее всего не правильно поняли.
Так вот, вопрос, зачем вам это? А точнее для чего такая конструкция? |
У меня есть несколько блоков, визуально и по конструкции они идентичны, отличимы только содержимым, мне необходимо для каждого из блоков задать свой интервал - с разным временным значением, и своими параметрами в функции, которая вызывается в интервале.
вот хотел это все засунуть в цикл, чтобы меньше было кода потому как дублируется все, за исключением id блока, времени интервала и пары параметров для функции |
Попробуйте разобрать это и почитайте про замыкания.
<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> |
Skipp,
спасибо, я не так вызывал анонимную функцию емае((( понял, остальное все как у Вас, работает. |
Часовой пояс GMT +3, время: 09:30. |