Таймер по событиям

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

Приветствуются варианты с использованием фреймворков smile
Ответы (6)
ava
magelan | 13.09.2010, 17:15 #
висят функции на событиях

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

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

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

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

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

ava
ksnk | 13.09.2010, 17:20 #
Цитата (magelan @ 13.9.2010, 17:15 findReferencedText)
висят функции на событиях



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
ava
evilelf | 13.09.2010, 17:45 #
Оу, спасибо за солюшен, работает!


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

function timer(){
if(timer.time) clearTimeout(timer.time);
timer.time = setTimeout(function(){alert('ололо!!!11');}, 1000);
}
ava
magelan | 13.09.2010, 17:48 #
ksnk,

Цитата


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


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

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

Впрочем выбор решения все равно за автором темы.
ava
ksnk | 13.09.2010, 18:24 #
Цитата (magelan @ 13.9.2010, 17:48 findReferencedText)
Я немного опасаюсь вашего решения, из-за частоты вызывания 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. Стоит ли переживать из-за такого замедления?
ava
evilelf | 13.09.2010, 20:22 #
Вообще, сей таймер пишется под машины с тачскрином...так что там будут только клики: по кнопкам формы, виртуальной клавиатуры... Кстати, хороший скрипт последней не подскажете? smile
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  ksnk   evilelf   magelan
advanced
Отправить