Рекурсия в setInterval
Нужно последовательно выполнить одну функцию с разными параметрами
Код примерно такой function setint(elem) { var seti1 = setInterval(function() { elem.style.left = (parseInt(elem.style.left)+10)+"px"; if(parseInt(elem.style.left) > 100) { clearInterval(seti1); } },100); } setint(document.getElemetnById("id_1")); Соответственно, после того, как setint выполнилось с id_1, нужно его выполнить c id_2, затем с id_3, а потом опять с id_1 и так по кругу. Подскажите, пожалуйста, как это можно сделать? |
(function(){ var i=0; var seti1 = setInterval(function(){ var elem=document.getElemetnById("id_"+i%3+'1') elem.style.left = (parseInt(elem.style.left)+10)+"px"; if(parseInt(elem.style.left) > 100&&i==2) clearInterval(seti1); i++; },33); }()) |
Цитата:
<!DOCTYPE HTML> <html> <head> <title></title> <style type="text/css"> div{ height: 100px; width: 100px; background-color: #FFCC00; } </style> </head> <body> <div id="id_1" style="left: 5px; position: relative">id="id_1"</div> <div id="id_2" style="left: 5px; position: relative">id="id_2"</div> <div id="id_3" style="left: 5px; position: relative">id="id_3"</div> <script language="JavaScript" type="text/javascript"> function setint(num) { var elem = document.getElementById("id_"+num) var seti1 = setInterval(function() { elem.style.left = (parseInt(elem.style.left)+10)+"px"; if(parseInt(elem.style.left) > 100) { clearInterval(seti1); if(num++ < 4) setint(num) } },100); } setint(1); </script> </body> </html> |
Всю функцию я писать не стал. Т.к. там очень много параметров. Т.е. я создаю несколько div, затем добавляю текс, устанавливаю начало смещения, и тд. Затем удаляю и так нужно сделать по циклу.
Спасибо Deff за вариант, но учитывая, что параметров много, такой способ не очень удобен. Может есть способ выполнить через рекурсию, те. как-то так function setint(elem) { var seti1 = setInterval(function() { elem.style.left = (parseInt(elem.style.left)+10)+"px"; if(parseInt(elem.style.left) > 100) { clearInterval(seti1); setint(document.getElemetnById("id_2")); } },100); } но по циклу. Причем основная проблема - это начать сначала, те. с id_1 |
Спасибо, в целом Вышло.
Буду теперь пробовать передать параметры через объект. |
platedz,
Нет смысла вызывать setInterval для установки каждого параметра, что не айс(тем паче если параметров много) Когда можно установки делать с единственного setInterval, и даже его не прерывать, clearInterval(seti1); а лишь ставить stop Keу для вызова внутренних, вложенных функций для каждого параметра(или группы) |
Подскажите, пожалуйста, а как бы мне теперь вместо
var elem = document.getElementById("id_"+num) передать объект var elem = object_num Т.е. у меня получается var object_1 = {a: "a1",b:"b1"} var object_2 = {a: "a2",b:"b2"} var object_3 = {a: "a3",b:"b3"} |
platedz,
Вариант ... var num = 2 var object_1 = {a: "a1",b:"b1"} var object_2 = {a: "a2",b:"b2"} var object_3 = {a: "a3",b:"b3"} var obj = ['',object_1,object_2,object_3] alert(obj[num]['a']); |
Deff, рони Большое спасибо. Все вышло.
|
Часовой пояс GMT +3, время: 03:28. |