定时器间隔不工作Javascript

时间:2016-03-15 20:16:33

标签: javascript jquery

所以我试图使用计时器间隔运行一个弹出脚本,无论出于什么原因,计时器都不计算它只是在加载时触发。

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

3 个答案:

答案 0 :(得分:0)

适合我。 减少测试用例:

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

PS:

  • 请务必使用var声明所有变量。
  • 如果你的变量不是jQuery-Object,那么你也不应该让你的变量以$开头(例如$limit应该是limit
  • 请注意 触摸设备用户不会移动任何鼠标,因此&#34;空闲&#34;每一次。
  • 请注意,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;被击中了。

小提琴:https://jsfiddle.net/2ewzr4sx/

答案 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: "/"
    });
  } 
});