只要没有鼠标运动或按键,我使用此代码每x秒运行一次功能。只要没有用户活动,我才能以2倍的价值增加计时器,并将其限制为300000?

问题描述 投票:0回答:4

使用超时,增加超时,然后像下面再次致电超时。

在下面的示例中,我们在500ms中调用超时,然后我们加倍,以1000ms的重新调用,将其翻倍至2000毫秒,等等。

eDit

我不确定您希望它如何工作,但是将您的jQuery添加到混合中会看起来像这样。一旦您停止了超时,一旦您停止移动超时就开始返回
mousemove
javascript jquery setinterval
4个回答
2
投票

500ms

let timeout let interval = 500 let maxTime = 10000 function myTimeout() { console.log("Delayed: " + interval + "ms") interval *= 2 if(interval < maxTime) { timeout = setTimeout(myTimeout, interval) } else { console.log("I am exiting!") } } $(document).ready(function () { // Zero the idle timer on mouse movement. $(document).on('mousemove', function (e) { clearTimeout(timeout) interval = 500 timeout = setTimeout(myTimeout, interval) }); $(document).on('keypress', function (e) { clearTimeout(timeout) interval = 500 timeout = setTimeout(myTimeout, interval) }); // Start the Timeouts timeout = setTimeout(myTimeout, interval) });


我已将您的代码修改为此,我认为这是您在运行后需要看到的控制台(不要移动鼠标会重置计时器),

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

var time = 5000; var idleInterval; $(document).ready(function () { idleInterval = setInterval(timerIncrement, time); $(this).on('mousemove', function (e) { idleTime = 0; time = 5000; clearInterval(idleInterval); idleInterval = setInterval(timerIncrement, time); }); $(this).on('keypress', function (e) { idleTime = 0; time = 5000; clearInterval(idleInterval); idleInterval = setInterval(timerIncrement, time); }); }); function timerIncrement() { console.log('refreshContent is called after '+time+' milliseconds'); refreshContent(); time = time*2; if( time > 300000 ) { time = 300000; } clearInterval(idleInterval); idleInterval = setInterval(timerIncrement, time); } function refreshContent() { console.log('Stuffs you want to do when refresh content is called'); }


1
投票

首先,您无法将Settimeout设置为变量。 。
在您的示例中,您可以使用以下方式:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
一个简单的示例与

var idleTime = 0; var time = 5000; var currentActiveTimeoutId = 0; $(document).ready(function () { // Zero the idle timer on mouse movement. $(this).on('mousemove', function (e) { idleTime = 0; time = 5000; //reset timeout counter setTimeoutCounter(time); }); $(this).on('keypress', function (e) { idleTime = 0; time = 5000; //reset timeout counter setTimeoutCounter(time); }); setTimeoutCounter(time); }); //function to set the timeout and call the incrementor function setTimeoutCounter(timeOut){ //clear previous timeout created clearTimeout(currentActiveTimeoutId); currentActiveTimeoutId = setTimeout(timerIncrement, timeOut); } function timerIncrement() { idleTime = idleTime + 1; if (idleTime > 1) { time = time*2; if( time > 300000 ) { time = 300000; } refreshContent(); //recall set timeout and apply the next value of time setTimeoutCounter(time); } }


0
投票
事件。

当触发(或达到最大时间)

时,



0
投票
keypress

mousemove


2K25中的同样需求)
keypress

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.