在页面加载时,我们应该等待15秒,然后以鼠标移动的形式开始检查用户活动。如果存在用户活动,则触发代码并再次开始等待15秒以进行用户活动。
我的最佳镜头如下。我创建了一个间隔,它允许每15秒检查一次,另一个间隔检查权限并尝试在第一次鼠标移动时触发代码,然后重置权限 - 每秒。
初始检查是正确的(等待15秒并且直到鼠标移动才开始),但是无论用户活动如何,代码都会每15秒持续一次 - 尽管奇怪的是只有在窗口进入时焦点。我怀疑我的错误是在mousemove位,但我不确定。
var allow = false;
setInterval(permission, 15000);
function permission() {
if (allow == false){
allow = true;
}
}
setInterval(function() {
$('body').one('mousemove', function() {
if (allow == true){
alert("code firing");
allow = false;
$('body').off( "mousemove" )
}
});
}, 1000);
答案 0 :(得分:0)
您可以使用变量来跟踪最后一次鼠标移动。
var lastMove = new Date(); // assume last move was now
$(document).on('mousemove', function() {
lastMove = new Date();
});
setInterval(function() {
var currentTime = new Date();
// compare dates in milliseconds to see if the difference is greater than 15000
if (currentTime.getTime() - lastMove.getTime() >= 15000) {
// if it's greater, trigger your code
}
}, 5000); // perform this check every 5 seconds
我每隔5秒执行一次检查,以便最大可能的延迟为20秒。
答案 1 :(得分:0)
您应该删除第二个setInterval
。
您的第一个setInterval
每15秒正确设置allow
到 true 。
on('mousemove', function() {
if(allow){
// do stuff
allow = false;
}
});
只要移动鼠标,此部件就会触发。但只有在allow
为 true 时才会生效。所以这就是你想要的。由于每15秒允许设置为 true ,因此您只需每15秒完成一次(当然只有移动鼠标时才会完成)。
当然,重要的是,在您完成任务后,将allow
设置为 false 。
答案 2 :(得分:0)
你应该使用setTimeout
,因为你需要的时间间隔不是恒定的:你不知道用户什么时候移动它们的鼠标,15秒的时间段应该从0开始。
这是一个有3秒等待的演示(快速测试):
var allow;
function lockUp() {
allow = false;
$('#output').text("No permission for 3 seconds!");
setTimeout(function () {
$('#output').text("Permission!");
allow = true;
}, 3000);
}
// start by locking for 3 secs
lockUp();
$(document).on('mousemove', function() {
if (!allow) return; // not allowed
lockUp();
// Perform the action here...
// ...
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
&#13;