Событие неактивности пользователя в JavaScript
Иногда бывает нужно определить активен пользователь на странице или нет. Например, если у Вас на сайте есть чат, то глупо обновлять его, например, каждые 5 секунд, нагружая сервер, если пользователь ушёл в магазин, а сайт не закрыл, или же перешёл на другую вкладку. В этой статье мы поговорим, как можно определить активность пользователя на странице.
Оптимальным решением было бы определять активность вкладки с нашим сайтом. То есть если открыта вкладка с нашим сайтом, то пользователь активен, иначе нет. Однако, нормального инструмента для реализации подобного в JavaScript нет. Вдобавок, это не защищает от походов в магазин.
Поэтому мы разберём универсальный метод по выяснению активности пользователя на JavaScript. Его особенностью является то, что если пользователь отлучится от компьютера, оставив даже открытым наш сайт, всё равно он будет признан неактивным, что очень хорошо. Многие из Вас уже, наверняка, догадались, что основной инструмент определения активности пользователя - это движение мышью.
Если мышь двигается, значит, пользователь активен, а если она определённое время не двигается, значит, пользователь не активен, или перешёл уже давно на другую вкладку.
Реализация этого алгоритма приведена в следующем коде:
<script type="text/javascript">
var no_active_delay = 30; // Количество секунд простоя мыши, при котором пользователь считается неактивным
var now_no_active = 0; // Текущее количество секунд простоя мыши
setInterval("now_no_active++;", 1000); // Каждую секунду увеличиваем количество секунд простоя мыши
setInterval("updateChat()", 1000); // Запускаем функцию updateChat() через определённый интервал
document.onmousemove = activeUser; // Ставим обработчик на движение курсора мыши
function activeUser() {
now_no_active = 0; // Обнуляем счётчик простоя секунд
}
function updateChat() {
if (now_no_active >= no_active_delay) { // Проверяем не превышен ли "предел активности" пользователя
alert("Пользователь не активен"); // В реальности стоит убрать, а здесь дано как доказательство того, что всё работает
return;
}
/* Обновляем чат */
}
</script>
Я думаю, что код достаточно прозрачный, плюс он хорошо прокомментирован, поэтому проблем с пониманием возникнуть не должно.
Однако, у этого способа имеется один большой недостаток. Ведь пользователь необязательно будет двигать мышью - он может элементарно читать текст или смотреть видео, или же ждать ответа в чате (чего он не увидит, если к мыши не прикоснётся). Исходя из этого не стоит выбирать слишком маленький "предел активности" пользователя. Лично я ставлю 30 секунд, хотя зависит всё от Вашего сайта, возможно, стоит поставить и 120 секунд или даже больше. А, возможно, у Вас такой мощный сервер или такая низкая посещаемость, что и вовсе не нужно вычислять активен пользователь или нет.
Вот такое необычное событие неактивности пользователя в JavaScript можно сделать самостоятельно.
-
- Михаил Русаков
Комментарии (5):
Спасибо!
Ответить
А как данный скрипт будет работать на планшетах и смартфонах?
Ответить
Не тестировал.
Ответить
как сделать переход на сайт вместо алерта и добавить исключение домена где не будет работать таймер
Ответить
ок, получили мы событие при неактивности пользователя, а если он потом пришел из магазина и поводил мышкой? Чтобы реализовать это в контексте чата этого кода маловато будет.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.