zvezda_t
19.11.2013 - 13:08
Всем привет)
Скажите, пожалуйста, возможно ли javascript функцией отследить - что пользователь не шевелил подмышкой в течении какого - то времени?
Допустим не шевелится подмышка и не нажимаается ни одна кнопка в течении пяти минут, тогда появляется окошко с вопросом "Вы оствались неактивны в течении 5 минут. Продолжить работу?"
Возможно, это?
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
bestxp
19.11.2013 - 13:11
да
вроде как
ведь есть пару эвентов mousemove keyup и тд
конечно придется помучатся с прототипами и расширить их поведение, тут я теоретически говорю
inpost
19.11.2013 - 13:14
zvezda_tsetInterval на каждую секунду и сохраняй координаты мыши, изменились - обнуляй счётчик.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
zvezda_t
19.11.2013 - 13:30
inpost, не шутишь? Браузер не загнется от такой нагрузки?
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
glock18
19.11.2013 - 14:28
Цитата (zvezda_t @ 19.11.2013 - 09:30) |
inpost, не шутишь? Браузер не загнется от такой нагрузки? |
Надеюсь, что шутит. bestxp верно сказал о mousemove. keyup/keydown тоже нужны, если в целом активность нужна. Сильно сомневаюсь, хотя, что нужно с прототипами там что-то делать - просто вешаешь обработчики на соответствующие события, где чистишь и устанавливаешь таймаут на нужное тебе время. Соответственно, когда события выстреливают периодически, таймер будет постоянно обнуляться, как только прекратили - таймаут прошел, функция твоя отработала.
redreem
19.11.2013 - 15:29
(function() {
this.startTime = new Date().getTime();
this.precision = 1000;
this.timeout = 1000*60*5;
window.onmousemove = function() {
this.startTime = new Date().getTime();
}
this.int = setInterval(function() {
var currentT = new Date().getTime();
console.log(currentT + ' ' + this.startTime);
if (this.startTime + this.timeout < currentT ) {
this.callback();
}
}, this.precision);
this.callback = function() {
clearInterval(this.int);
alert('5 минут мышка не шевелилась.');
}
}());
:)
bestxp
19.11.2013 - 15:36
событие придется вешать на всё, а тут уже проблема, хотя надо опять же шаманить в window
а вообще вроде как можно поймать событие когда окно становиться не активным ( смена вкладки например )
так как предполагаю ( не уверен, нужно проверить ) могут некоторые браузеры останавливать работу таймеров
как вариант решения
1 интервал раз в минуту проверяет значение например когда было последнее событие, и как только промежуток пережил своё выдает сообщение выйдет что-то в таком роде
inpost
19.11.2013 - 15:42
glock181 раз в секунду проверять положение мыши более нагрузочное, чем для обычных посетителей при любом микро-движении мыши вызывать событие onmousemove + переназначать при каждом движении таймер? Ты считаешь, что это будет лучше?
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
killer8080
19.11.2013 - 15:49
Цитата (zvezda_t @ 19.11.2013 - 11:08) |
Допустим не шевелится мышка и не нажимаается ни одна кнопка в течении пяти минут, тогда появляется окошко с вопросом "Вы оствались неактивны в течении 5 минут. Продолжить работу?" |
<script>
(function() {
var timer = null,
timeout = 300000;
function watcher() {
clearTimeout(timer);
start_timer();
}
function start_timer() {
timer = setTimeout(function() {
alert('Вы оствались неактивны в течении 5 минут. Продолжить работу?');
start_timer();
}, timeout);
}
start_timer();
window.addEventListener('mousemove', watcher, false);
window.addEventListener('mousedown', watcher, false);
window.addEventListener('keydown', watcher, false);
})()
</script>
killer8080
19.11.2013 - 15:50
Цитата (inpost @ 19.11.2013 - 13:42) |
glock18 1 раз в секунду проверять положение мыши более нагрузочное, чем для обычных посетителей при любом микро-движении мыши вызывать событие onmousemove + переназначать при каждом движении таймер? |
визуально тормозов не наблюдается
Invis1ble
19.11.2013 - 15:51
inpostа ты не думал, что я могу пошевелить мышью и вернуть в исходное положение в течение одной секунды? И твой алгоритм это не "просечет"
Это если даже отбросить рассуждения про оптимальность.
redreemа зачем this везде понатыкал?
И в обработчиках другая область видимости вроде как.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
glock18
19.11.2013 - 15:55
Цитата (inpost @ 19.11.2013 - 11:42) |
glock18 1 раз в секунду проверять положение мыши более нагрузочное, чем для обычных посетителей при любом микро-движении мыши вызывать событие onmousemove + переназначать при каждом движении таймер? Ты считаешь, что это будет лучше? |
Как минимум, я знаю, что такой вариант используется. Как минимум, я знаю, что проверять координаты мыши не значит проверять двигали ей или нет, и уж тем более это никак не контролирует ввод с клавиатуры. Более того, если на странице какая-то большая форма, то мышь часто и вовсе не нужна, а заполняться такое может долго.
redreem привел как раз нечто среднее, хотя едва ли чем-то лучше. Все равно придется вешать обработчики на все ивенты, чтобы контролировать ситуацию, и при этом иметь этот ненужный интервал.
а вот killer8080 привел, на мой взгляд, лучший вариант.
glock18
19.11.2013 - 15:57
Цитата (Invis1ble @ 19.11.2013 - 11:51) |
а зачем this везде понатыкал? И в обработчиках другая область видимости вроде как. |
ну, на коленке писал, понятное дело. в реале это вопрос одной строчки
killer8080
19.11.2013 - 16:01
Цитата (glock18 @ 19.11.2013 - 13:55) |
а вот killer8080 привел, на мой взгляд, лучший вариант. |
его нужно доводить, чтоб был кроссбраузерным, проверять наличие addEventListener или attachEvent для ишаков ниже 8-ки. Ну или юзать внешнюю либу для навешивания событий
inpost
19.11.2013 - 16:03
Invis1bleКонечно думал, но какова вероятность, что успеют поставить мышь на ту же позицию за 1 секунду?
glock18В условии стояло именно движение мыши. Если другие события, то другие события так же стоило бы проверять, я просто лишнего не прикручивал.
zvezda_tНа приватбанке есть такой прикол, заходишь на сайт, смотришь на свой баланс и видишь там проблему, открываешь чат-поддержку, чатишься (это сайт другой), буквально через 20 минут чата (они тормознутые) говорят проверить карточку. Если ты кликаешь по вкладке на сайте - выкидывает из авторизации и из чата одновременно, при восстановлении авторизации на сайте - чат НОВЫЙ загружается с НОВЫМ оператором. Итого ВСЁ потеряли. Бесит ужасно, а с мышкой, да может быть я просто читаю текст... 3 анекдота + посмеяться занимает у меня более 30 секунд, когда сижу на Баше с мобилки.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.