所以我试图使用计时器间隔运行一个弹出脚本,无论出于什么原因,计时器都不计算它只是在加载时触发。
idleTime = 0;
$(document).ready(function() {
$limit = 5;
if ($.cookie('newVisit') != '1') {
$.get('/pop_form.htm', function(data) {
$('.subs-popup').html(data);
});
function timerIncrement() {
idleTime++;
if (idleTime > $limit) {
$('.subs-popup ').show();
idleTime = 0;
}
}
var idleInterval = setInterval(timerIncrement, 1000); // 1 second
$(this).mousemove(function(e) {
idleTime = 0;
});
$(this).keypress(function(e) {
idleTime = 0;
});
$.cookie('newVisit', '1', {
expires: 364,
path: "/"
});
}
});
只是不确定还有什么可以让它正常工作?任何帮助将不胜感激。
更新***
所以我做了你说的,这里是我的代码与变化。除了现在我收到意外的令牌错误。
var idleTime = 0;
$(document).ready(function() {
var limit = 7;
if ($.cookie('newVisit') !='1') {
$.get('/pop_form.htm', function(data) {
$('.subs-popup').html(data);
});
function timerIncrement() {
idleTime++;
if (idleTime > limit) {
$('.subs-popup ').show();
idleTime = 0;
}
}
var idleInterval = setInterval(timerIncrement, 1000); // 1 second
$(this).mousemove(function (e) {
idleTime = 0;
});
$(this).keypress(function (e) {
idleTime = 0;
});
$.cookie('newVisit', '1', { expires: 364 , path: "/" });
}
}); <----- this is where i get the unexpected token error
答案 0 :(得分:0)
适合我。 减少测试用例:
var idleTime = 0;
$(document).ready(function() {
var limit = 5;
function timerIncrement() {
idleTime++;
if (idleTime > limit) {
alert('Idle!');
idleTime = 0;
}
}
var idleInterval = setInterval(timerIncrement, 1000); // 1 second
$(this).mousemove(function(e) {
idleTime = 0;
});
$(this).keypress(function(e) {
idleTime = 0;
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
PS:
var
声明所有变量。$
开头(例如$limit
应该是limit
)setInterval()
设置的时间间隔不能保证在此时间内执行。例如。选项卡在后台时具有节流间隔的浏览器。 答案 1 :(得分:0)
这是另一种解决方案:
var timeout = null;
function resetTimer() {
clearTimeout(timeout)
timeout = setTimeout(function() {
clearTimeout(timeout)
alert("Idle!")
}, 5000);
}
$(document).mousemove(function(e) {
resetTimer();
});
$(document).keypress(function(e) {
resetTimer()
});
这使用setTimeout()
的返回值,它是对超时的引用。您可以使用此引用调用clearTimeout()
,它将取消/清除/删除超时,因此您可以在每次鼠标移动/按下某个键时启动一个新的 - 而不是记录它的次数和次数#39;被击中了。
答案 2 :(得分:0)
第一次运行后,你不会看到任何弹出窗口,因为它是setInterval()
的范围,当它运行第二次它在窗口范围内运行时你可以看到
function timerIncrement() {
console.log('scope is:', this);
idleTime++;
/* rest your function code goes here... */
因此,为了防止它,您必须在全局范围内定义timerIncrement()
,以便setInterval
可以访问和调用它; :)
更新的代码:
function timerIncrement() {
idleTime++;
if (idleTime > $limit) {
$('.subs-popup ').show();
idleTime = 0;
}
}
var idleTime = 0;
var idleInterval = 0;
var $limit = 5;
$(document).ready(function() {
if ($.cookie('newVisit') != '1') {
$.get('/pop_form.htm', function(data) {
$('.subs-popup').html(data);
});
idleInterval = setInterval(timerIncrement, 1000); // 1 second
$(this).mousemove(function(e) {
idleTime = 0;
});
$(this).keypress(function(e) {
idleTime = 0;
});
$.cookie('newVisit', '1', {
expires: 364,
path: "/"
});
}
});