Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009 Откуда: Блага
Помог: 0 раз(а)
подскажите как притормозить цикл? Есть цикл который меняет атрибуты некой группы объектов поочередно по id объекта, но желаемого эффекта я не получаю так как весь цикл проходит ну очень быстро)))) в итоге мне нужно кикл как то притормаживать, нужно после последней инструкции в цикле поставить таймер задержки примерно 0,3 секунды. Яподскажите как?
valenok
Отправлено: 07 Февраля, 2010 - 09:55:18
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Никак.
Можете использовать рекурсию
где функция будет вызывать не себя-же, а включать таймер window.setTimeout,
которая, в свою очередь, через 0,3 сек. будет запускать вашу функцию снова.
----- Truly yours, Sasha.
JustUserR
Отправлено: 07 Февраля, 2010 - 14:06:44
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Hunter пишет:
Подскажите как притормозить цикл
Вообще нужно сделать примерно так как сказал valenok потому что это самое естественное решение и во время выполнения setTimeout браузер не будет висеть - в отличие от цикла или долгой рекурсии (Которая к тому что упадет где-то после 1000 шага
Но ради удоволетворения вашего любопытства скажу что решение без setTimeout есть хотя оно конечно работает только IE - можете почитать о нем здесь http://forum[dot]script-coding[dot]info/[dot][dot][dot]opic.php?id=1110
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Hunter
Отправлено: 10 Февраля, 2010 - 15:10:36
Частый гость
Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009 Откуда: Блага
Помог: 0 раз(а)
JustUserR
дайте хоть пример что ли.. мне не лень копаться, просто разрываюсь и времени не хватает..
p.s. плиз))
JustUserR
Отправлено: 10 Февраля, 2010 - 16:34:35
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Hunter пишет:
JustUserR дайте хоть пример что ли.. мне не лень копаться, просто разрываюсь и времени не хватает.. p.s. плиз))
Я вас понимаю у самого времени достаточно мало - но в приведенной мною ссылке не описание а уже готовое решение
Как я уже говорил данный метод будет работать только в IE - потому что для работы требуются HTA-приложения и ActiveX-элементы - напоминаю ссылку на готовый пример http://forum.php.su/rd.php?http:...opic.php?id=1110
Основная суть заключается в том что вы загружаете объект WScript и благодаря него включаете функцию sleep необходмую для вашей задачи
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Ch_chov
Отправлено: 10 Февраля, 2010 - 17:30:08
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Ch_chov пишет:
// Используй return для выхода из цикла
Хм у такого цикла преимущество в том что он реалзован лишь встроенными средставми - но есть минус в том что область видимости переменных не будет одинаковой у итераций и передавать данне между итерациями такого эмулятора цикла напрямую через локальную переменную не получится При этом такую функцию нельзя просто так вызвать из другой чтобы получить ее результат - надо будет отлавливать ее завершение и делать все связанные с ней функции по временному вызову
Да и зачем делать функцию анонимной уж присоили ее куда-нибудь в переменную window.my_loop чтобы можно было создать статическую область для хранения статических переменных типа my_loop.my_var потому что arguments.caller не укажет предыдущих вызов так как все такие функции выполняются через контекст window.setTimeout - иначе бы они переполняли браузерных стек JS который разрешает не более 1000 вложеннных вызовов
И еще скажу что такие функции типа (function() {})() работают не на всех браузерах
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Ch_chov
Отправлено: 11 Февраля, 2010 - 15:59:25
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
Цитата:
область видимости переменных не будет одинаковой у итераций
А разве в javascript у циклов есть своя локальная область видимости?
Цитата:
При этом такую функцию нельзя просто так вызвать из другой чтобы получить ее результат
Это и не требовалось.
Цитата:
Да и зачем делать функцию анонимной уж присоили ее куда-нибудь в переменную
Если её не нужно вызывать, то зачем ей имя?
Цитата:
потому что arguments.caller не укажет предыдущих вызов так как все такие функции выполняются через контекст window.setTimeout
еще скажу что такие функции типа (function() {})() работают не на всех браузерах
Назови конкретно, браузер и его версию.Отредактировано модератором: JustUserR, 11 Февраля, 2010 - 17:19:21 Убрал логическую ошибку в оформлнии блоков
JustUserR
Отправлено: 11 Февраля, 2010 - 17:27:46
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Ch_chov пишет:
Запросто укажет. Проверь сам
Я написал дословно что у данной функции в arguments.caller будет не вызвавшая ее через время функция а сам window.setTimeout - да и кроме того через eval нельзя такую функцию вызвать - точнее можно сичтав ее код и выполнив но контекст уже будет другой
Ch_chov пишет:
А разве в javascript у циклов есть своя локальная область видимости?
Если создать переменную в цикле с помощью var var_name то из следующей итерации она будет доступна - в вашей функции конечно же такого не будет
Ch_chov пишет:
Назови конкретно, браузер и его версию.
Скажем в IE6 такая конструкция дословно будет работать но через window.setTimeout вызываться не будет
Ch_chov пишет:
10 циклов с паузой 300 мс
А вы все-таки попробуйте внедрить такой ваш цикл в другоую функцию чтобы они могли еще возвращать значения столько проблем будет - да и все вызовы через window.setTimeout между собой не связаны и у них только общий анонимный объект типа function
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.