Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.02.2013, 22:58
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Рекурсия в 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 и так по кругу. Подскажите, пожалуйста, как это можно сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 02.02.2013, 23:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

(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); 

}())

Последний раз редактировалось Deff, 02.02.2013 в 23:53.
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2013, 23:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,052

Сообщение от platedz
потом опять с id_1 и так по кругу
и куда двигаться если было if(parseInt(elem.style.left) > 100)
<!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>

Последний раз редактировалось рони, 02.02.2013 в 23:53.
Ответить с цитированием
  #4 (permalink)  
Старый 02.02.2013, 23:55
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Всю функцию я писать не стал. Т.к. там очень много параметров. Т.е. я создаю несколько 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
Ответить с цитированием
  #5 (permalink)  
Старый 03.02.2013, 01:06
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо, в целом Вышло.

Буду теперь пробовать передать параметры через объект.
Ответить с цитированием
  #6 (permalink)  
Старый 03.02.2013, 01:08
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platedz,
Нет смысла вызывать setInterval для установки каждого параметра, что не айс(тем паче если параметров много)
Когда можно установки делать с единственного setInterval, и даже его не прерывать, clearInterval(seti1); а лишь ставить stop Keу для вызова внутренних, вложенных функций для каждого параметра(или группы)
Ответить с цитированием
  #7 (permalink)  
Старый 03.02.2013, 01:34
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Подскажите, пожалуйста, а как бы мне теперь вместо

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"}
Ответить с цитированием
  #8 (permalink)  
Старый 03.02.2013, 10:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,052

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']);
Ответить с цитированием
  #9 (permalink)  
Старый 03.02.2013, 13:06
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Deff, рони Большое спасибо. Все вышло.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предложение представить код с setInterval для n - но более двух DOM-єлементов JavaScriptProgrammer Events/DOM/Window 1 09.11.2012 07:09
setInterval и глобальные переменные Почемучкин Events/DOM/Window 11 11.08.2012 14:44
один setInterval внутри другого setInterval-а dadli Общие вопросы Javascript 5 20.03.2012 17:16
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 17:38