Как определить, действительно ли пользователь просматривает веб-страницу? - PullRequest
3 голосов
/ 13 февраля 2011

Можно ли определить, активен ли пользователь на текущей веб-странице или, скажем, сосредоточен на другой вкладке или окне?

Кажется, что если вы переключаете вкладки, любой JavaScript, установленный на тайм-аут / интервал, продолжает работать. Было бы неплохо иметь возможность «приостановить» события, когда пользователя нет на странице.

Хотелось бы что-то вроде прикрепления события наведения мыши к кузову или это было бы слишком ресурсоемким?

Ответы [ 5 ]

4 голосов
/ 13 февраля 2011

Вы можете разместить onfocus/onblur события на window.

В этом окне поддерживается широкая поддержка .

Пример: http://jsfiddle.net/xaTt4/

window.onfocus = function() {
    // do something when this window object gets focus.
};

window.onblur = function() {
    // do something when this window object loses focus.
};
1 голос
/ 13 февраля 2011

Open Web Analytics (и, возможно, некоторые другие инструменты отслеживания) имеет отслеживание действий

0 голосов
/ 28 марта 2018

Вы также можете использовать visibilityState документа:

document.addEventListener("visibilitychange", function() {
  if( document.visibilityState === 'visible' ) {
    // Do your thing
  }
});

Существует широкое признание этого API.

0 голосов
/ 13 февраля 2011

Прикрепите слушателей к движению мыши, нажатию клавиши и выделите документ.

Я использую эту функцию throttle / debounce (которая работает без jQuery, даже если это плагин jQuery, если присутствует jQuery), чтобы запускать код в ответ только один раз в ~ 250 мс, так что вы ' не запускаем код на каждый пиксель движущейся мыши.

0 голосов
/ 13 февраля 2011

Вы можете сохранить действующую переменную, используя mousemove события (при условии, что пользователь не оставляет мышь на странице).Если эта переменная (вероятно, временная метка) не была обновлена ​​в течение x секунд, можно сказать, что страница не активна, и приостановить выполнение любого сценария.

Пока вы не выполняете много обработки в событии bodyХендлер, с тобой должно быть все в порядке.Он должен просто обновить переменную, а затем выполнить скрипт, опрашивающий ее через определенный интервал для выполнения обработки / проверки (скажем, каждые 1000 мс).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...