Java Script "Псевдо-параллельность"

PB
На сайте с 29.11.2007
Offline
40
832

Подскажите, пожалуйста, кто сталкивался, как это реализовать ("псевдо параллельность") .

Есть страница содержащая некоторые элементы интерфейса, к каждому элементу привязывается определенная логика обработки действий пользователя. В свою очередь реакция некоторых элементов должна происходить с определенной задержкой, например: продолжительностью минута. Java Script выполняет инструкции последовательно, как добиться эффекта параллельности ?

Для большей наглядности приведу конкретный пример:

Есть блок появление которого вызывается по клику на кнопку, по заданию, если пользователь не работает с данным блоком в течении минуты блок должен стать невидимым. Ясно, что если бы это блок был единственным то используя setTimeout() проблемы не возникало бы. Но в течении минуты пользователь может обратиться к другим блокам, задержка не сработает, блок не исчезнет.

Вариантом решения вижу, возможно, использование функции "диспетчера", которая последовательно будет переключаться между функциями, и проверять состояние.

Но возникают вопросы: каким образом лучше отслеживать временные периоды, большая ли вероятность упустить событие. И в правильном ли направлении идет мысль в целом.

Надеюсь суть изложил понятно.

C
На сайте с 28.01.2010
Offline
70
#1
PLSB:

Для большей наглядности приведу конкретный пример:
Есть блок появление которого вызывается по клику на кнопку, по заданию, если пользователь не работает с данным блоком в течении минуты блок должен стать невидимым. Ясно, что если бы это блок был единственным то используя setTimeout() проблемы не возникало бы. Но в течении минуты пользователь может обратиться к другим блокам, задержка не сработает, блок не исчезнет.

Возможно я не понял суть, но если вешать на таймаут функцию, которая будет закрывать конкретный блок, то как этому помешают действия с другими блоками и таймаутами?

Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
Joker-jar
На сайте с 26.08.2010
Offline
123
#2

Как вариант, один общий счетчик (тот же setTimeout). Время отображения каждого блока заносим в массив. Счетчик, скажем, каждые пять секунд пробегается по этому массиву и определяет, какие из блоков следует скрыть на данной итерации. В массиве помимо времени отображения можно сразу хранить id блока, длительность отображения, всякие флаги, ну и так далее.

Оказываю услуги веб-программиста и администратора Linux. ICQ: 751355 | Jabber: jokerjar@jabber.ru | Skype: joker-jar
PB
На сайте с 29.11.2007
Offline
40
#3

Counselor, Joker-jar спасибо, за ответы.

Counselor:
Возможно я не понял суть, но если вешать на таймаут функцию, которая будет закрывать конкретный блок, то как этому помешают действия с другими блоками и таймаутами?

Вот к примеру такой кусочек кода (на примере двух функций) :

function test(){

alert('Произойдет сброс timeout');

}

$('.block').hover(

function(){alert('Начало действия пользователя')},

function(){setTimeout(function(){$(this).slideUp(600);},30000)}

)

Если пользователь не вызывал test() 30 секунд, то block исчезнет, если же вызвал то timeout прекращается.

ДП
На сайте с 23.11.2009
Offline
195
#4

вообще у setTimeout есть возвращаемое значение - идентификатор таймера - его можно использовать для функции clearTimeout()

т.е. запускаете таймер на скрытие блока, если в результате каких-то действий скрывать не нужно - то clearTimeout()

Тут проблема только в хранении/получении нужных идентификаторов таймеров.

PB
На сайте с 29.11.2007
Offline
40
#5

Дикий пионер, спасибо!

Дикий пионер:
вообще у setTimeout есть возвращаемое значение - идентификатор таймера - его можно использовать для функции clearTimeout()
т.е. запускаете таймер на скрытие блока, если в результате каких-то действий скрывать не нужно - то clearTimeout()
Тут проблема только в хранении/получении нужных идентификаторов таймеров.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий