Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: таймер для цикла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Hunter
Отправлено: 07 Февраля, 2010 - 07:58:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


Помог: 0 раз(а)




подскажите как притормозить цикл? Есть цикл который меняет атрибуты некой группы объектов поочередно по id объекта, но желаемого эффекта я не получаю так как весь цикл проходит ну очень быстро)))) в итоге мне нужно кикл как то притормаживать, нужно после последней инструкции в цикле поставить таймер задержки примерно 0,3 секунды. Яподскажите как?
 
 Top
valenok
Отправлено: 07 Февраля, 2010 - 09:55:18
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Никак.
Можете использовать рекурсию
где функция будет вызывать не себя-же, а включать таймер window.setTimeout,
которая, в свою очередь, через 0,3 сек. будет запускать вашу функцию снова.


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 07 Февраля, 2010 - 14:06:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 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/
 
 Top
Hunter
Отправлено: 10 Февраля, 2010 - 15:10:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


Помог: 0 раз(а)




JustUserR
дайте хоть пример что ли.. мне не лень копаться, просто разрываюсь и времени не хватает..
p.s. плиз))
 
 Top
JustUserR
Отправлено: 10 Февраля, 2010 - 16:34:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 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/
 
 Top
Ch_chov
Отправлено: 10 Февраля, 2010 - 17:30:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. (function() {
  2.  
  3. // Используй return для выхода из цикла.
  4.  
  5. setTimeout(arguments.callee, 300)
  6. })()
 
 Top
JustUserR
Отправлено: 11 Февраля, 2010 - 15:05:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 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/
 
 Top
Ch_chov
Отправлено: 11 Февраля, 2010 - 15:59:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Цитата:
область видимости переменных не будет одинаковой у итераций

А разве в javascript у циклов есть своя локальная область видимости?


Цитата:
При этом такую функцию нельзя просто так вызвать из другой чтобы получить ее результат
Это и не требовалось.


Цитата:
Да и зачем делать функцию анонимной уж присоили ее куда-нибудь в переменную
Если её не нужно вызывать, то зачем ей имя?


Цитата:
потому что arguments.caller не укажет предыдущих вызов так как все такие функции выполняются через контекст window.setTimeout
Запросто укажет. Проверь сам.
CODE (javascript):
скопировать код в буфер обмена
  1. // 10 циклов с паузой 300 мс
  2. (function() {
  3.   if (!arguments.callee.i) arguments.callee.i = 0
  4.   if(arguments.callee.i > 10) return
  5.   arguments.callee.i++
  6.  
  7.   // Здесь твой код
  8.  
  9.   setTimeout(arguments.callee, 300)
  10. })()



Цитата:
еще скажу что такие функции типа (function() {})() работают не на всех браузерах
Назови конкретно, браузер и его версию.


Отредактировано модератором: JustUserR, 11 Февраля, 2010 - 17:19:21
Убрал логическую ошибку в оформлнии блоков
 
 Top
JustUserR
Отправлено: 11 Февраля, 2010 - 17:27:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 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/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB