Jump to content
  • 0

setTimeout()


DjTarik
 Share

Question

Собственно:

setTimeout('...', 1000);
wrapper.parentNode.removeChild(wrapper);
eclipse.parentNode.removeChild(eclipse);

Пока работает таймер - функции должны ждать.

Можно ли так сделать?

P.S. Обыскал инет - сказали, что нельзя сделать паузу. Как тогда поступать в таких случаях?

Спасибо.

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0
Аналога функции sleep() в JS не существует, т.к. скрипт выполняется в один поток.

http://forum.htmlbook.ru/index.php?showtopic=21100

Если честно - по ссылке так ничего и не понял (я ещё совсем лошара в JS) - мою проблему решить вообще можно? Или это нереальная задача без сильных выкрунтасов?

И кстати - может я вообще не в ту сторону копаю?

Мне нужно изменить прозрачность, а потом удалить объект. Может это как-нить по другому делается?

P.S. Вот в JQ, к примеру, всё двигается, и потом выполняются функции. Движение же основано тоже на таймерах. Как они там делают "паузы"? O_o

Link to comment
Share on other sites

  • 0
Смотри, вот светофор, он мигает по таймеру, когда мне нужно. Посмотри, это то, что ты ищешь?

http://psywalker.ru/Forum/JS/Primitive/Set...Svetofor/2.html

По идее нет. У тя там каждая функция имеет setTimeout(). А значит, они все между собой завязаны. Получается, что твой скрипт никогда не останавливается. Ты не ждёшь окончания таймера - а сразу задаешь следующий. У меня так не прокатит. =(

Но всё равно спасибо - идея и реализация - супер! =)

Link to comment
Share on other sites

  • 0
Врут поди.

Если нельзя сделать паузу - как тогда делают в лайтбоксах, что вначале они затемняются, только потом появляются изображения, и только потом - центрируются? Там же как то вся по порядку идёт, друг за другом, по цепочке. Сначала одно, потом второе и т.д.

Link to comment
Share on other sites

  • 0
Если нельзя сделать паузу - как тогда делают в лайтбоксах, что вначале они затемняются, только потом появляются изображения, и только потом - центрируются? Там же как то вся по порядку идёт, друг за другом, по цепочке. Сначала одно, потом второе и т.д.

Вы так говорите будто можете сделать чтобы у вас одновременно "затемнялось" "Появлялись изображения" и еще "Центрировалось все"

Link to comment
Share on other sites

  • 0
Вы так говорите будто можете сделать чтобы у вас одновременно "затемнялось" "Появлялись изображения" и еще "Центрировалось все"

На самом деле так и получается - три разные функции, вызываются одна за одной. Но так как первая идёт с таймаутом - получается, что вторая начинает работу быстрее первой.

А надо именно подряд.

Link to comment
Share on other sites

  • 0

Если делаете аналог лайтбокса, то у объекта Image есть событие onload после которого становятся доступны размеры изображения и можно запускать ресайз. Загрузка изображения начинается только после затемнения потому, что срабатывает callback после окончания анимации затемнения.

В общем в этом случае никакой sleep не нужен, можно обойтись стандартными методами.

Link to comment
Share on other sites

  • 0
Если делаете аналог лайтбокса, то у объекта Image есть событие onload после которого становятся доступны размеры изображения и можно запускать ресайз. Загрузка изображения начинается только после затемнения потому, что срабатывает callback после окончания анимации затемнения.

В общем в этом случае никакой sleep не нужен, можно обойтись стандартными методами.

C события ми всё понятно. так и делаю.

вот этого не понял:

...потому, что срабатывает callback после окончания анимации затемнения.

У меня затемнение идёт одно временно с созданием дива, в который будет загружаться изображение.

Link to comment
Share on other sites

  • 0
Див надо создавать после того как анимация затемнения закончилась.

Ну так в этом и проблема - как узнать, когда она закончилась? Хотел задать флаг. Не получилось... =( Через рекурсию пробовал.

Link to comment
Share on other sites

  • 0

При чем тут рекурсия...

Вы же знаете когда остановить таймаут? Когда останавливается затемнение? Вот тогда и надо запускать функцию создания дива.

function foo() {
var dark = document.getElementById('somediv');

dark.timeout = window.setTimeout(function() {
тут_анимация_изменения_прозрачности

if (прозрачность_достигла_нужной_величины) {
window.clearTimeout(dark.timeout);
createImageDiv(); // функция запустится только после того как отработает анимация
}
}, 10);
}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy