![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Wowa |
|
||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
Есть два варианта:
|
||||
|
|||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Псевдо-задержку делает второй вариант, где js-интерпретатор принудительно загружен работой и не идёт дальше (может и пойти в отдельных трудноуловимых случаях), пока её не выполнит. В этом мало красоты ибо скрипт сильно грузит машину, есть риск не вывалиться из цикла и т.п.
Первый вариант по сути задержкой (sleep) не является, т.к. таймауты в javascript - это отложенное исполнение от точки вызова (ноль) на некое количество миллисекунд. То есть определённая отдельная часть кода откладывается на потом, но интерпретатор продолжает двигаться дальше и может увеличить отложенное время. В принципе, можно представить это дело и задержкой, если отложенная часть кода и есть весь оставшийся код. Есть ещё варианты с диалоговыми окнами, которые держат скрипт, но это не всегда работает и не особо радует пользователя. |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Я не знаю по каким причинам здесь не приведен самый правильный вариант задержки, а именно через window.setInterval().
Важно понимать разницу между setTimeout и setInterval В первом случае для обеспечения повторения через заданный промежуток времени, вам необходимо организовать рекурсию или косвенную рекурсию. То есть, например, разместить строку window.setTimeout("hierGehtsWeiter()", 3000); в методе hierGehtsWeiter() В случае же setInterval, никакой рекурсии не нужно. Более того вызов этой функции может происходить из любого места. Собственно вызов приведет к тому что, заданная в первом параметре функция или метод будут вызываться через, заданное во втором параметре количество миллисекунд. Единственным неприятным моментом в использовании window.setInterval() является необходимость хранить значение интегрального идентификатора интервала, который используется для остановки работы этой функции. Этот интервал возвращается методом window.setInterval() и используется в методе window.clearInterval() Для пущей ясности привожу пример:
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
- это не задержка (sleep), а отложенное исполнение от точки вызова (ноль), что никак не может удерживать интерпретатор; - setInterval по сравнению с setTimeout не является более правильным, один для разового исполнения, другой - нет; - для обеспечения повторений через setTimeout можно обойтись и без рекурсии, но в любом случае для повторений setInterval удобнее; - хранить id таймаутов для последующей "очистки" желательно и в отношении setTimeout-ов во избежание багов; |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |