Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия в setInterval, Поочередное выполнение функции 
:(
    Опции темы
platedz1
Дата 2.2.2013, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.1.2013

Репутация: нет
Всего: нет



Нужно последовательно выполнить одну функцию с разными параметрами

Код примерно такой


Код


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 и так по кругу. Подскажите, пожалуйста, как это можно сделать?
PM MAIL WWW   Вверх
skyboy
Дата 3.2.2013, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



вариант 1. три интервала — каждый со своими данными и интервалом ×3. вариант хорош, если количество фиксировано, а данные, уникальные для каждого прохода — неизменны. 
вариант 2. вынести переменную за пределы инетрвальной функции и менять её. 
насчет того, как этот параметр передавать извне — передавать массив. а в интервальной функции элементы массива местами менять.
PM MAIL   Вверх
Arantir
Дата 3.2.2013, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Анимацию делаете? Лучше воспользуйтесь jQuery, это такой набор готовых скриптов. Есть расширение jQueryUI практически со всеми воображаемыми видами анимации. 
И последовательный вызов там сделать очень просто, функция .animate принимает в качестве аргумента callback (т.е. функцию, которая будет в вызвана по завершению анимации).
Ну а зациклить по набору элементов несложно.

Пример не претендует на элегантность, но суть отображает:
Код

    var elements = ["#id_1", "#id_2", "#id_3"];
    var i = 0;

    function anim(i)
    {
        $(elements[i]).animate(
            {left: "+=100"},
            300,
            function(){
                //Завершена анимация одного элемента
                i++;
                i = (i >= elements.length) ? 0 : i;
                anim(i);
            });
    }
    anim(i);



Это сообщение отредактировал(а) Arantir - 3.2.2013, 00:29


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
platedz1
Дата 3.2.2013, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.1.2013

Репутация: нет
Всего: нет



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

Буду теперь пробовать передать параметры через объект.

Это сообщение отредактировал(а) platedz1 - 3.2.2013, 01:07
PM MAIL WWW   Вверх
platedz1
Дата 3.2.2013, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.1.2013

Репутация: нет
Всего: нет



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

 var elements = ["#id_1", "#id_2", "#id_3"];

передать объект

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"}

PM MAIL WWW   Вверх
Arantir
Дата 3.2.2013, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



platedz1, знаете, чтобы разбираться в JS достаточно знать всего несколько важных моментов. Но почему-то большинство это упускает.

В JS все и так есть объекты. По-этому функции можно совать прямо в аргументы и всякое такое... Почти все - это просто объекты или массивы объектов.
Код
var elements = [object_1, object_2, object_3];
ну или сразу
Код

var elements = [
     {a: "a1",b:"b1"},
     {a: "a2",b:"b2"},
     {a: "a3",b:"b3"},
     ];

Например
Код

object_1["a"] = 0;
alert(object_1.a); // выведет ноль
object_1.b = 1;
alert(object_1["b"]); // выведет единицу
// конечно есть парочка вполне логичных ограничений:
elements = 0;
elements.c = 0; // с числами так сделать нельзя

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

Объект вы передаете без проблем. Нужно всего лишь правильно им потом воспользоваться (ну то есть вы же не станете умножать между собой массивы или пробовать вызывать число, как функцию).

Код

$(elements[i].a).animate( // например, elements[0].a == "a1"
ну или в каком поле у вас там id


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
platedz1
Дата 3.2.2013, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.1.2013

Репутация: нет
Всего: нет



Спасибо, большое не знал, что так можно. 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0974 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.