当用户在我的网站上停留45秒时,如何使用setTimeout()或任何其他javascript方法来调用函数。
我使用的是以下内容:
setTimeout(function(){ ....code.... }, 45000);
但是如果用户在45秒之前导航离开页面并进入网站上的另一个页面,则重置计时器。
我希望将setTimeout应用到用户登陆第一页的时间,无论他们现在在哪个页面。
我将在网站的每个页面上包含此javascript。
感谢。
答案 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()
})