![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| funasian |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.7.2005 Репутация: нет Всего: нет |
Вообщем зада такая. Нужно создать паузу (задержку), внутри функиции, но чтоб не тормозило комп. Пример.
Так вот когда пытаешся закрыть эту страницу, то заменяется весь текст на странице и в статусе бежит счётчик. Если в том месте где надо вставить функцию использовать переход на другую функцию реализующую паузу, то сразу после вызова функции она пропускается и продолжается выполнение основной функции. как реализовать там задержку, при этом чтоб не вешался комп? Также пытался использовать такой вариант, тоже ничего не дал.
|
||||
|
|||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Во первых тема поднималась несколько раз, последний раз участником Иль. Пользуйся поиском.
Во вторых всё таки углубимся Что интересно если ты запустишь несколько setTimeout'ов то они все будут исполняться в текущем потоке, новых не создаёться. Другими словами если где то замереть, например alert'ом или сложными вычислениями, то следующий setTimeout может исполниться гораздо позже чем это было задуманно. Считаю что это не правильно, но так придумали нетскейповцы, а все из-за совместимости продолжают поддерживать имено такую модель. О потоках, опытным путём было доказанно что внешние обьекты, например XMLHttpRequest исполняют своих обработчиков событий в отдельном потоке, т.е. можно получить два модальных окна(alert) одновременно, что теоретически не возможно, модальное окно останавливает исполнение потока Также отдельным потоком исполняються подключаемые внешние скрипты. Ля-ля достаточно, перейдём к практике И так уснуть нельзя, можно только отложить исполнение определённой функции на время. Отсюда рассматриваем задачу под другим углом. Допустим нужно изменять обьект через каждую секунду. Напрашиваеться мысль:
В JS придёться ставить код на интервал, код будет по таймеру исполняться. Это кстати очень удобно
А как же в твоей задаче? Я так понял нужно подождать некоторе время а затем предложить пользователю покинуть страницу. Вот тут получим облом, т.к. при выходе из события onbeforeunload автоматом появиться окошко ИЕ о уходе. Остановить этот процесс по вполне понятным причинам нельзя(кто не понял, иначе пользователь не смог бы уйти со страницы). Установка таймаута не остановит текущий процесс. Отсюда один выход - забей Я думаю вряд ли кому нужна задержка окошка ИЕ об уходе, это только раздражет. Как заключение, модель таймеров какая она сейчас в JS на мой взгляд наиболее удобна. Не хватает только потоков и их управления. Не нравиться что таймеры исполняються не каждый в своём потоке. В остальном механизм по сути редкий и удобный для своих прямых задачь. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| funasian |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.7.2005 Репутация: нет Всего: нет |
Окошко не всегда появляется. Во первых оно открывается, только тогда, когда происходит выход из фунции котороая вызвалась или же вызов другой свойе функции. А если вернуть из функции true, то страница сама закроется. А если не возврашать, и при этом в мойем первом варианте убрать if(c1>1000){ main_flag1 = true; } То окно эксполрера можно будет закрыть только черзе панель задачь, да и комп будет висеть. А так спасибо за раширенные ответы. |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Окошко появляеться тогда и только тогда, когда из события onbeforeunload ты возвращаешь false(не важно какие функции вызываються), там самым ты говоришь, я ещё не готов заркыть окно. Поэтому браузер спрашиает пользователя, "мол тут скрипты ещё работают, действительны ли вы хотите покинуть страницу?". Это очень удобное напоминание если пользователь вводил кучу инфы, а потом нечаянно нажал на "крестик".
Это не задержка, это подвисание бразуера, которое через 3-5 секунд будет прервано. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| funasian |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.7.2005 Репутация: нет Всего: нет |
Если вернуть текст то оно его выведет в предупреждении закрывать или нет. И этот текст рассматривается как false. По крайней мере так в IE Второе. У меня висит повисшее покаместь я его сам не убью. |
||||||
|
|||||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |