如何等待一定的时间间隔,然后检查用户活动和消防代码并再次开始等待?

时间:2016-09-30 23:08:27

标签: jquery setinterval timing

在页面加载时,我们应该等待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);

3 个答案:

答案 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;
&#13;
&#13;

相关问题