2017-06-05 125 views
-1

我将如何使用setTimeout()或任何其他javascript方法来调用一个函数,当用户已经在我的网站上了45秒。setTimeout为整个网站,而不仅仅是一个页面

我用的是下面:

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

但是,如果用户导航在页面上和前45秒网站上的其他网页时,计时器被重置。

我希望setTimeout适用于用户登录第一页的时间,而不管他们现在处于什么页面。

我将在网站上的每一页上都包含此javascript。

谢谢。

+2

它不这样工作。您必须在每个单独的页面上启动计时器。您可以节省访客首次到达本地存储的时间,然后计算出适当的差异。 – deceze

+1

您可以使用本地存储在页面访问之间存储任何类型的数据。你可以这样做:localStorage.setItem('key','value');更好的选择是有服务器端超时计算。 –

+0

你可以从这个选项得到想法https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_coming_soon_js –

回答

2

当用户访问您的网页时,您必须将时间戳存储到localStorage,并在用户从您的网站上跳转时使用setTimeOut开始计时并收听onbeforeUnlaod事件。

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

这里是一个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

你在'onbeforeUnlaod'上做了什么... ...? – deceze

+0

@deceze我想象一下,如果你想要这个逻辑,就去掉当地的商店钥匙...... – Seabizkit

+0

@Seabizkit如果你在那里存储时间戳,那么它就没有什么意义,所以它可以在下一页中找到... – deceze

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() 
}) 
相关问题