整个网站的setTimeout,而不仅仅是一个页面

时间:2017-06-05 07:34:57

标签: javascript html

当用户在我的网站上停留45秒时,如何使用setTimeout()或任何其他javascript方法来调用函数。

我使用的是以下内容:

setTimeout(function(){ ....code.... }, 45000);

但是如果用户在45秒之前导航离开页面并进入网站上的另一个页面,则重置计时器。

我希望将setTimeout应用到用户登陆第一页的时间,无论他们现在在哪个页面。

我将在网站的每个页面上包含此javascript。

感谢。

2 个答案:

答案 0 :(得分:2)

当用户访问您的网页并使用localStorage启动计时器时,您必须将时间戳存储到setTimeOut,并在用户离开您的网站时收听onbeforeUnlaod事件。

再次当用户回来时查询lastTime的localStorage并重新启动计时器。

这是fiddle

var your_delay = 5*1000;
window.init= function(){
    var start = localStorage.getItem('start');
    var end = new Date().getTime();
    if(start){
         if(end-start<your_delay)
           setTimeout(action,your_delay-(end-start));
    }else{
       setTimeout(action,your_delay);
    }
}
window.onbeforeunlaod = function(){
      /* Send the timer to server if you want it to be consistant across browser */
}


window.action = function(){
     alert("Hi");
}

init();

答案 1 :(得分:2)

只需将该javascript文件添加到具有setTimeout功能的所有页面即可。当用户转到其他页面时,它将自动重置:

setTimeout(() => { ... }, 45e3)

如果我理解正确,您还希望节省用户在页面上超过45秒的时间。然后使用localStorage。首先得到他带有日期对象的网站时间:

let timer = new Date()

然后将差异保存在localStorage(以毫秒为单位):

localStorage.setItem("Time on site", new Date().getTime() - timer.getTime())

每当您想要访问该时间时使用:

localStorage.getItem("Time on site")

在页面加载时执行计时器:

let timer
window.addEventListener('load', () => {
    timer = new Date()
})