Использование таймера
Задача: реализовать отображение отсчета времени до закрытия окна.
Для реализации использую вот такие функции: function Repl(ch) { var str = document.getElementById('ans').value; str = str.replace(ch+1,ch); document.getElementById('ans').value= str; } function CloseWindowTimer() { setTimeout("Repl(2);", 1000); setTimeout("Repl(1);", 1000); setTimeout("Repl(0);", 1000); setTimeout("window.close();", 500); } на форме лежит <INPUT TYPE=submit name='ans' id='ans' VALUE='closing for 3 sec...'> по зажумке на кнопке должен идти отсчет: 3сек... 2сек.. 1сек... 0сек... <полсекунды и закрытие> на самом деле отсчет 3-2-1-0 происходит за один раз (2сек и 1сек зрительно не видно) и окно закрывается. В чем проблема? Такое ощущение, что setTimeoutы отрабатываются одновременно - почему? (браузер Opera, IE7) |
Цитата:
|
Как сказал ds [.code], setTimeout создает ответвление от основного выполнения программы, так что в этом коде, по сути, не выполняется Repl(), т.к window.close() срабатывает на полсекунды раньше первого Repl().
К сожалению, в javascript нет реализаций функций остановки выполнения основной программы, по типу sleep или wait. Как решение, можно запускать эту функцию в setInterval и считать кол-во вызовов, либо разницу во времени. |
Андрей Параничев,
Цитата:
Если Вас интересует синхронный дилэй с подвешиванием браузера (как например, модальное окно alert(...)), то можно использовать разницу миллисекунд объекта Date. |
ds [.code],
Кстати да, я совсем не подумал об этом. Действительно ведь setTimeout и setInterval не являются в полной мере тредами. Точнее они совсем ими не являются, получается, если какую-нибудь функцию поставить на тайм-аут, то когда пройдет время тайм-аута функция всё-равно будет выполнятся в основной программе (прервав её выполнение)? |
странно, или форум гюканул или кто-то удалил мой пост (я уже отвечал на этот вопрос)
Цитата:
|
Да, я тоже удивился. Я тогда прочитал твой ответ, а потом он куда то пропал :)
|
А у нас вроде как мультипочность наблюдаеться...
Ну вообщем фиг знает какой он там псевдо (кстати что вы имеете в виду этим словом) или не псевдомультипоточный на третьей лисе и вроде даже на iE6 замечательно идут и главная и куча параллельных функций одновременно.
P.S. Я сам сразу не вьехал что setTimeOut это не спящая функция =) |
Часовой пояс GMT +3, время: 05:22. |