[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как определить - что не шевелится мышка
Страницы: 1, 2, 3, 4
zvezda_t
Всем привет)

Скажите, пожалуйста, возможно ли javascript функцией отследить - что пользователь не шевелил подмышкой в течении какого - то времени?

Допустим не шевелится подмышка и не нажимаается ни одна кнопка в течении пяти минут, тогда появляется окошко с вопросом "Вы оствались неактивны в течении 5 минут. Продолжить работу?"

Возможно, это?

_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
bestxp
да
вроде как

ведь есть пару эвентов mousemove keyup и тд
конечно придется помучатся с прототипами и расширить их поведение, тут я теоретически говорю
inpost
zvezda_t
setInterval на каждую секунду и сохраняй координаты мыши, изменились - обнуляй счётчик.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
zvezda_t
inpost, не шутишь? Браузер не загнется от такой нагрузки?


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
glock18
Цитата (zvezda_t @ 19.11.2013 - 09:30)
inpost, не шутишь? Браузер не загнется от такой нагрузки?

Надеюсь, что шутит. bestxp верно сказал о mousemove. keyup/keydown тоже нужны, если в целом активность нужна. Сильно сомневаюсь, хотя, что нужно с прототипами там что-то делать - просто вешаешь обработчики на соответствующие события, где чистишь и устанавливаешь таймаут на нужное тебе время. Соответственно, когда события выстреливают периодически, таймер будет постоянно обнуляться, как только прекратили - таймаут прошел, функция твоя отработала.
redreem
(function() {
this.startTime = new Date().getTime();
this.precision = 1000;//каждую секунду
this.timeout = 1000*60*5;//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
событие придется вешать на всё, а тут уже проблема, хотя надо опять же шаманить в window

а вообще вроде как можно поймать событие когда окно становиться не активным ( смена вкладки например )
так как предполагаю ( не уверен, нужно проверить ) могут некоторые браузеры останавливать работу таймеров


как вариант решения
1 интервал раз в минуту проверяет значение например когда было последнее событие, и как только промежуток пережил своё выдает сообщение выйдет что-то в таком роде

inpost
glock18
1 раз в секунду проверять положение мыши более нагрузочное, чем для обычных посетителей при любом микро-движении мыши вызывать событие onmousemove + переназначать при каждом движении таймер? Ты считаешь, что это будет лучше?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
killer8080
Цитата (zvezda_t @ 19.11.2013 - 11:08)
Допустим не шевелится мышка и не нажимаается ни одна кнопка в течении пяти минут, тогда появляется окошко с вопросом "Вы оствались неактивны в течении 5 минут. Продолжить работу?"

<script> 
(
function() {
var timer = null,
timeout = 300000; //в миллисекундах (5 минут)

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
Цитата (inpost @ 19.11.2013 - 13:42)
glock18
1 раз в секунду проверять положение мыши более нагрузочное, чем для обычных посетителей при любом микро-движении мыши вызывать событие onmousemove + переназначать при каждом движении таймер?

визуально тормозов не наблюдается
Invis1ble
inpost
а ты не думал, что я могу пошевелить мышью и вернуть в исходное положение в течение одной секунды? И твой алгоритм это не "просечет" smile.gif Это если даже отбросить рассуждения про оптимальность.

redreem
а зачем this везде понатыкал? smile.gif И в обработчиках другая область видимости вроде как.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

glock18
Цитата (inpost @ 19.11.2013 - 11:42)
glock18
1 раз в секунду проверять положение мыши более нагрузочное, чем для обычных посетителей при любом микро-движении мыши вызывать событие onmousemove + переназначать при каждом движении таймер? Ты считаешь, что это будет лучше?

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

redreem привел как раз нечто среднее, хотя едва ли чем-то лучше. Все равно придется вешать обработчики на все ивенты, чтобы контролировать ситуацию, и при этом иметь этот ненужный интервал.

а вот killer8080 привел, на мой взгляд, лучший вариант.
glock18
Цитата (Invis1ble @ 19.11.2013 - 11:51)
а зачем this везде понатыкал?  И в обработчиках другая область видимости вроде как.


ну, на коленке писал, понятное дело. в реале это вопрос одной строчки
killer8080
Цитата (glock18 @ 19.11.2013 - 13:55)
а вот killer8080 привел, на мой взгляд, лучший вариант.

его нужно доводить, чтоб был кроссбраузерным, проверять наличие addEventListener или attachEvent для ишаков ниже 8-ки. Ну или юзать внешнюю либу для навешивания событий smile.gif
inpost
Invis1ble
Конечно думал, но какова вероятность, что успеют поставить мышь на ту же позицию за 1 секунду?

glock18
В условии стояло именно движение мыши. Если другие события, то другие события так же стоило бы проверять, я просто лишнего не прикручивал.

zvezda_t
На приватбанке есть такой прикол, заходишь на сайт, смотришь на свой баланс и видишь там проблему, открываешь чат-поддержку, чатишься (это сайт другой), буквально через 20 минут чата (они тормознутые) говорят проверить карточку. Если ты кликаешь по вкладке на сайте - выкидывает из авторизации и из чата одновременно, при восстановлении авторизации на сайте - чат НОВЫЙ загружается с НОВЫМ оператором. Итого ВСЁ потеряли. Бесит ужасно, а с мышкой, да может быть я просто читаю текст... 3 анекдота + посмеяться занимает у меня более 30 секунд, когда сижу на Баше с мобилки.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.