2014-09-11 44 views
0

我有这个检测器脚本,以检测用户/鼠标是否离开页面(退出陷阱)。 除了脚本运行良好以外,它有时会检测到鼠标最初从地址栏进入页面。如何将其延迟30秒,以便仅在用户在页面上停留了30秒时才进行检查?如何延迟鼠标移动检测30秒

jQuery(document).ready(function($) { 
jQuery(document).setTimeout(function(f) {   
jQuery(document).mousemove(function(e) {  
if (e.pageY - jQuery(document).scrollTop() <= 7) 
if (document.referrer == null {  USER LEAVING !!! } 
}); 
, 2000); 
}); 

+3

难道你们就不能只是包装中的setTimeout MouseMove事件? – Undefined 2014-09-11 13:32:27

+0

似乎并不工作 – Tom 2014-09-11 14:07:25

+0

@Tom我认为他的意思是'$(document).mousemove(function(){setTimeout(/ * Your stuff * /,30000);});'。注意:30秒是* WAY *对于网页上的大多数事情来说太长了 – 2014-09-11 14:09:22

回答

0

我能想到的最简单的方法就是抓住时间戳在页面加载时,则每次检查鼠标移动火灾。

基本上是:

var movementThreshold = 0; 
$(document).ready(function() { 
    movementThreshold = new Date().getTime() + 30000; // Get the current time, add 30s 
}); 
$(document).mousemove(function (e) { 
    if (new Date().getTime() > movementThreshold) { 
     // process the event, at least 30s has passed 
    } 
}); 
0

我已经重写你的代码下面解决一些语法错误和功能问题

的一些技巧

  • 使用$没有的jQuery除非有具体原因不然。它更短,更简洁。
  • setTimeout不是jQuery方法,请参阅docs here
  • 为什么你甚至试图阻止用户离开?这是糟糕的用户体验,除非您专门试图帮助用户不丢失未保存的数据。
  • 您的支票已损坏,以检测用户是否正在离开一个网页,我建议您搜索类似this的东西。

$(function($) { 
    setTimeout(function() { 
     $('body').mousemove(function(e) {  
      if (
       (e.pageY - jQuery(document).scrollTop() <= 7) && 
       (document.referrer == null) 
      ) { 
       // handle 
      } 
     });  
    }, 30000); 
});