Иногда бывает нужно определить активен пользователь на странице или нет . Например, если у Вас на сайте есть чат, то глупо обновлять его, например, каждые 5 секунд, нагружая сервер, если пользователь ушёл в магазин, а сайт не закрыл, или же перешёл на другую вкладку. В этом материале мы поговорим, как можно определи...
Иногда бывает нужно определить активен пользователь на странице или нет. Например, если у Вас на сайте есть чат, то глупо обновлять его, например, каждые 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 можно сделать самостоятельно.
