请查看下面的两行注释代码,您可以在其中插入用户空闲时和用户返回时要执行的代码。在第三行设置空闲时间段,1000 表示 1 秒。
idleTimer = null;
idleState = false;
idleWait = 2000;
(function ($) {
$(document).ready(function () {
$('*').bind('mousemove keydown scroll', function () {
clearTimeout(idleTimer);
if (idleState == true) {
// Reactivated event
$("body").append("<p>Welcome Back.</p>");
}
idleState = false;
idleTimer = setTimeout(function () {
// Idle Event
$("body").append("<p>You've been idle for " + idleWait/1000 + " seconds.</p>");
idleState = true; }, idleWait);
});
$("body").trigger("mousemove");
});
}) (jQuery)
此方法使用 setTimeout 函数在指定秒数结束时触发。如果在此期间发生任何事情(鼠标移动、页面滚动或按下键盘),超时时间段将重置。
非常棒的想法,但在 Google Chrome v4.0.302.2 中,演示只是每 10 秒左右循环显示“您已空闲 2 秒。”和“欢迎回来”。
什么操作系统?我在 Linux 和 Windows 上运行最新版本,代码运行正常。
我在使用 Windows Vista。如果我移动鼠标,它会正确地认为我回来了,但如果我不碰任何东西,它会在大约 10 秒后错误地认为我回来了。
奇怪。不幸的是,我这里无法测试 Vista。
如果增加 idleWait,10 秒的间隔是否会增加?
对我来说工作正常!在 Ubuntu 9.10 上的 FF3.6 和 Chrome 4.0.249.43 上测试过。
查看 jsbin.com/uxoya
在 Chrome 4.0.249(Mac OSX Snow Leo)上工作正常
以防万一有人想知道,这段代码有两个主要用途;能够在用户不活动时执行 CPU 密集型任务,反之亦然;
在用户返回之前禁用昂贵的脚本以节省处理能力。
实际示例包括 Facebook,他们在空闲时停止 AJAX 页面更新,以及 GTalk 的网络版本(集成到电子邮件中),它使用状态向其他人显示用户状态。
在 Windows7 上的 IE8 和 Chrome 上不起作用,在 FireFox 上可以工作。
谁能帮我修改一下这个脚本,以便在其空闲状态下,它加载一个页面并使用 get 方法传递一些内容,例如“test.php?name=johndoe”???
很酷的代码片段。
您还应该将点击事件添加到绑定事件中。
谢谢!我在 http://mixedminds.com 上使用了它来隐藏我的“滚动到顶部”按钮,当用户空闲时,这样按钮就不会遮挡移动设备上的内容。只要用户再次“活跃”,按钮就会显示,只要窗口 scrollTop() > 150。
您将如何跟踪实际经过的秒数(而不是始终在 HTML 文档中追加一条带有 2 秒的消息)?我尝试使用
setInterval()
函数,但它返回了一些非常奇怪的值。有什么想法吗?提前感谢。谢谢,
我稍微修改了一下,通过在用户点击确定时使用 alert 注销非活动用户,他们随后被重定向到注销页面,然后重定向到登录页面。
idleTimer = null;
idleState = false;
idleWait = 240000;
(function ($) { $(document).ready(function () {
$('*').bind('mousemove keydown scroll', function () {
clearTimeout(idleTimer);
if (idleState == true) {
// 重新激活事件
window.location.replace("logout.php");
}
idleState = false;
idleTimer = setTimeout(function () {
// 空闲事件
alert("您已空闲 " + idleWait/60000 + " 分钟。");
idleState = true; }, idleWait);
});
$("body").trigger("mousemove");
});
})
谢谢,
Nods
找到一个可用的代码片段并将其包含在 JQuery Mobile 应用程序中,它正在工作,感谢这篇文章。
有没有办法检测用户是否已切换到另一个窗口,如果浏览器窗口未处于活动状态或用户不在其中(已打开但未聚焦),则它将运行一个函数。谢谢
谢谢,Chris!我发现这非常有用。此外,.bind() 已被 .on() 替换。
“从 jQuery 3.0 开始,.bind() 已被弃用。它已被 .on() 方法取代,用于将事件处理程序附加到文档。”
https://api.jqueryjs.cn/bind/
感谢您的代码。我有一个问题 :) 如果页面在多个选项卡中打开,并且鼠标在任何一个选项卡中处于活动状态。它不应该在任何选项卡中变为空闲。请我需要一个解决方案。
对于多个选项卡 - 使用本地存储或 cookie 来存储时间 - 不确定性能影响 - 可能需要去抖动。