2016-09-30 38 views
0

在页面加载时,我们应该等待15秒,然后开始以鼠标移动的形式检查用户活动。如果有用户活动,激活代码并再次等待用户活动15秒。如何等待一段时间,然后检查用户活动和消防代码并再次开始等待?

我最好的照片是下面。我做了一个允许每15秒检查一次的时间间隔,另一个时间间隔用于检查权限并尝试在第一次鼠标移动时触发代码,然后每秒重置权限。

初始检查是正确的(它等待15秒,直到鼠标移动才会触发),但是不管用户活动如何,代码都会每隔15秒继续触发一次 - 尽管足够奇怪,仅当窗口处于焦点。我怀疑我的错误是在鼠标移动位,但我不确定。

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

为此,您应该使用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>

+0

这一个似乎工作最可预测。当我必须与定时器合作时,我的大脑变成意大利面!感谢您的努力。 – jordy

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秒。

0

您应该删除第二个setInterval

您的第一个setInterval正确设置为allowtrue每15秒钟一次。

on('mousemove', function() { 
    if(allow){ 
      // do stuff 
      allow = false; 
    } 
}); 

无论何时移动鼠标,都会触发此部件。但仅当allow为真时才起作用。所以这实际上就是你想要的。由于每15秒将allow设置为true,所以您只需每15秒完成一次(当然,只有当鼠标移动时)才能完成。

当然重要的是,你设置了allow后,你做了你的东西。

+0

我觉得这是一个代码,我想写一整天的块,但我得到了卡在关于定时器的概念框中。感谢你! – jordy

+0

很高兴我可以帮助:) – JHolub

+0

其实,如果你等待超过15秒,它似乎并没有起作用。在定时器再次启动前,代码可以快速启动两次:/ – jordy

相关问题