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, время: 08:53. |