Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер по событиям, после окончания изменений на странице 
:(
    Опции темы
evilelf
Дата 13.9.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.3.2010

Репутация: нет
Всего: нет



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

Приветствуются варианты с использованием фреймворков smile

Это сообщение отредактировал(а) evilelf - 13.9.2010, 15:48
PM MAIL   Вверх
magelan
Дата 13.9.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 3
Всего: 16



висят функции на событиях

document.onmousemove = f;
document.onclick = f;
document.onkeydown = f;

функция f сбрасывает глобальную переменную flag в 0.

работает функция под setTimeout, каждым вызовом увеличивает глобальную переменную flag.

как только переменная достигла определенного значения, начинается шангри-ла.

"Определенное значение" зависит от того, как часто работает setTimeout, определяется славным методом "научного тыка".


PM MAIL   Вверх
ksnk
Дата 13.9.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(magelan @  13.9.2010,  17:15 Найти цитируемый пост)
висят функции на событиях

document.onmousemove = f;
document.onclick = f;
document.onkeydown = f;

Код

function f(){
  if(f.time) clearTimeout(f.time);
  f.time= setTimeout(user_looks_like_sleeping,30000); // 30000 - 30 секунд 
}
function user_looks_like_sleeping(){
   alert('не спи, замерзнешь!');
}


magelan, научный тык не нужен  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
evilelf
Дата 13.9.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.3.2010

Репутация: нет
Всего: нет



Оу, спасибо за солюшен, работает!

Код

document.onmousemove = timer;
document.onclick = timer;
document.onkeydown = timer;

function timer(){
  if(timer.time) clearTimeout(timer.time);
  timer.time = setTimeout(function(){alert('ололо!!!11');}, 1000);
}

PM MAIL   Вверх
magelan
Дата 13.9.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 3
Всего: 16



ksnk,
 
Цитата

magelan, научный тык не нужен 

как же без него то? без него скушно.

Я немного опасаюсь вашего решения, из-за частоты вызывания onmousemove.
Мне кажется, что setTimeout лучше пусть живет отдельно.

Впрочем выбор решения все равно за автором темы.

PM MAIL   Вверх
ksnk
Дата 13.9.2010, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(magelan @  13.9.2010,  17:48 Найти цитируемый пост)
Я немного опасаюсь вашего решения, из-за частоты вызывания onmousemove. Мне кажется, что setTimeout лучше пусть живет отдельно.

если в onmosemove будет делаться что-то тяжелое - он просто будет вызыватся с меньшей частотой, так что производительность не сильно пострадает. Вот только события могут начать пропадать. А насчет реальности задержки - можно прогнать такой тестик
Код

window.time=0;
var date = new Date(),t;

function xxx(){alert(window.time);}

for(i=0;i<1000;i++){
  clearTimeout(t);
//  t=setTimeout(xxx,1000);
  t=setTimeout("alert(window.time)",1000);
}
date2 = new Date();
time=date2.getMilliseconds()-date.getMilliseconds();

у меня в хроме выдает 4-6, в IE6 - 31. Тоесть в секунду вполне могут уместится 30000 итераций на моем компутере на IE6. Стоит ли переживать из-за такого замедления?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
evilelf
Дата 13.9.2010, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.3.2010

Репутация: нет
Всего: нет



Вообще, сей таймер пишется под машины с тачскрином...так что там будут только клики: по кнопкам формы, виртуальной клавиатуры... Кстати, хороший скрипт последней не подскажете? smile

Это сообщение отредактировал(а) evilelf - 13.9.2010, 20:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0890 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.