我想通过收听类似的事件
click, mousedown, mousemove, keydown, keypress, touchcancel, touchmove, focus, zoom, scroll
和更多类似的事件来检查用户是否在页面上仍然处于活动状态。
我想每隔 3 分钟检查一次,并在用户仍处于活动状态时运行一个函数。有活动时,需要每 3 分钟执行一次功能。
如果没有活动,则无需采取任何行动。
目前我有什么:
var app = angular.module('Application_TimeOut', []);
app.run(function($rootScope, $timeout, $document) {
console.log('starting run');
var executeOnceTimeout;
// Timeout timer value
var TimeOutTimerValue = 180000;
// Start a timeout
var TimeOut_Thread = $timeout(function(){ LogoutByTimer() } , TimeOutTimerValue);
var bodyElement = angular.element($document);
angular.forEach(['keydown', 'keyup', 'click', 'mousemove', 'DOMMouseScroll', 'mousewheel', 'mousedown', 'touchstart', 'touchmove', 'scroll', 'focus'],
function(EventName) {
bodyElement.bind(EventName, function (e) { TimeOut_Resetter(e) });
});
function LogoutByTimer(){
console.log('No action needed');
}
function TimeOut_Resetter(e){
console.log(' ' + e);
if (!executeOnceTimeout) {
executeOnceTimeout = $timeout(function() {
console.log('call this function once each time');
executeOnceTimeout = null;
}, 2000);
}
/// Stop the pending timeout
$timeout.cancel(TimeOut_Thread);
/// Reset the timeout
TimeOut_Thread = $timeout(function(){ LogoutByTimer() } , TimeOutTimerValue);
}
})
但这并没有按预期工作,因为它在执行函数后一直在查看交互,而这只会在 3 分钟后再次发生。看起来超时并没有停止。
试图改变$timeout
,$interval
但没有帮助。
如何才能在 3 分钟后运行对用户活动的检查,并且当有活动时,该功能Timeout_Resettter
将运行一次。之后,必须重置 3 分钟的计时器,并且必须每 3 分钟重复一次,当没有用户活动时,无需采取任何行动。