我有这个检测器脚本,用于检测用户/鼠标是否离开页面(退出陷阱)。它工作得很好,只是脚本太快了,有时它会检测到鼠标最初是从地址栏进入页面的。如何将其延迟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);
});
我能想到的最简单的方法是在页面加载时获取一个时间戳,然后在每次mousemove触发时检查它。
基本上:
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
}
});
我已经重写了下面的代码,以修复的一些语法错误和函数问题
的一些提示
- 除非有特殊原因,否则请使用$not jQuery。它更短更简洁
- setTimeout不是jQuery方法,请参阅此处的文档
- 你为什么要阻止用户离开?除非你特别试图帮助用户不丢失未保存的数据,否则这是糟糕的用户体验
- 你的检查被破坏了,以检测用户是否正在离开页面,我建议搜索类似的内容
$(function($) {
setTimeout(function() {
$('body').mousemove(function(e) {
if (
(e.pageY - jQuery(document).scrollTop() <= 7) &&
(document.referrer == null)
) {
// handle
}
});
}, 30000);
});