Есть ли универсальный window.onevent в JavaScript? - PullRequest
4 голосов
/ 10 января 2011

Я пытаюсь создать функцию JavaScript (в том числе и jQuery), чтобы проверить, как долго пользователь неактивен на текущей странице.Я знаю, что в JavaScript есть определенные оконные события, такие как window.onload, window.onmousemove и т. Д. Но мне было интересно, существует ли какая-либо функция, которая фиксирует какое-либо событие (например, перемещение мыши, нажатие клавиши или что-либо еще, что указывает на активностьпользователем на странице) без необходимости устанавливать все эти прослушиватели событий вручную?

Ответы [ 5 ]

5 голосов
/ 10 января 2011

Нет неактивного события, о котором я знаю.

Я предполагаю, что JQ - это честная игра, так как вы пометили ее.Вы можете связать несколько событий с помощью одного оператора связывания, так что-то вроде этого должно работать:

$('body').bind('mousedown keydown mousemove', resetInactiveTimer);
3 голосов
/ 10 января 2011

К сожалению, в javascript нет общего window.onevent.

Я выполнил сценарий «heartbeat», который вы описываете, чтобы убедиться, что сеанс поддерживается, пока пользователь активен на странице, а основные события для прослушивания: mousemove, keydown / keyup, scroll и, возможно, в фокусе окна.

Имейте в виду, что если вы используете многофункциональный текстовый редактор, такой как TinyMCE, который запускается в своем собственном iFrame на странице, эти события могут не запутаться, и вы захотите тщательно протестировать эти сценарии.

Использование Javascript-фреймворка, такого как jQuery или Mootools, значительно облегчит привязку одной функции к нескольким событиям или запуск ваших собственных событий для запуска или сброса таймаутов.

1 голос
/ 23 июля 2014

Вы можете создать CustomEvent и затем отправить его, как в моем примере:

var allEvents = new CustomEvent("all", {
    detail: {
        time: new Date()
    },
    bubbles: true,
    cancelable: true
});

function onEvt(evt) {
    switch (evt.type) {
        case 'abort': case 'beforeunload': case 'blur': case 'change': case 'click': case 'close': case 'contextmenu': case 'devicelight':
        case 'devicemotion': case 'deviceorientation': case 'deviceproximity': case 'dragdrop': case 'error': case 'focus': case 'hashchange':
        case 'keydown': case 'keypress': case 'keyup': case 'load': case 'mousedown': case 'mousemove': case 'mouseout': case 'mouseover':
        case 'mouseup': case 'mozbeforepaint': case 'paint': case 'popstate': case 'reset': case 'resize': case 'scroll': case 'select':
        case 'submit': case 'unload': case 'userproximity': case 'pageshow': case 'pagehide':
            evt.currentTarget.dispatchEvent(allEvents);
            break;
    }
}

window.addEventListener('click', onEvt);

window.addEventListener('all', function(evt) {
    alert('mwahahahahaha');
});
1 голос
/ 10 января 2011

Вы не хотели бы захватывать все события, так как, например, события загрузки и мутации не связаны с пользовательской активностью.Мне неизвестен интерфейс браузера для одновременного захвата многих событий.

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

0 голосов
/ 10 января 2011

Для этого нет общего события, но вы можете написать свою собственную функцию, основанную на Idle Timer Николаса С. Закаса.

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