您好我正在尝试跟踪用户在网页上花费的时间。所以我写了以下javascript来做到这一点。
脚本开始跟踪窗口聚焦的时间,然后在用户移动到其他选项卡或最小化窗口时暂停。
以下是代码:
$(function(){
var count = 0;
var interval;
var ispaused=false;
function setPause(){
ispaused=true;
}
function unpause(){
ispaused=false;
}
$(window).on("blur focus", function(e) {
var prevType = $(this).data("prevType");
if (prevType != e.type) { // reduce double fire issues
switch (e.type) {
case "blur":
setPause();
clearInterval(interval);
break;
case "focus":
unpause();
var interval = setInterval(
function(){
if(!ispaused) {
$('#timer').text(count += 1);
}
},1000
);
break;
}
}
$(this).data("prevType", e.type);
});
});
定时器在您对焦区域时启动,在模糊时暂停,但定时器在每次对焦和模糊循环后变得更快。不知道为什么会这样。请帮忙!
答案 0 :(得分:0)
我检查了你提供的小提琴,发现你将区间变量存储在一个局部变量上,我试图修复问题,看看它是否正常工作,并在这里更新了小提琴:
http://jsfiddle.net/9fzd1dap/1/
这是更新的脚本
$(function () {
var count = 0;
var interval; //This is the global interval variable
var ispaused = false;
function setPause() {
ispaused = true;
}
function unpause() {
ispaused = false;
}
$(window).on("blur focus", function (e) {
var prevType = $(this).data("prevType");
if (prevType != e.type) { // reduce double fire issues
switch (e.type) {
case "blur":
setPause();
break;
case "focus":
unpause();
clearInterval(interval);
//I removed the var keyword from the line below to prevent dual declarations.
interval = setInterval(
function () {
if (!ispaused) {
$('#timer').text(count += 1);
}
}, 1000
);
break;
}
}
$(this).data("prevType", e.type);
});
});
发生的事情是全局间隔变量未填充,本地间隔(函数内部)变量是填充的变量。我已经在更新的小提琴上测试了它,似乎工作得很好;)