我有一个带滚动条的div,其中包含一个日志文件。 我通过运行一个向服务器发出ajax请求的计时器,每隔5000毫秒从服务器获取最新的日志。
但是,每次当我正在阅读并向下滚动div时,ajax请求会使用新内容刷新div,然后我再次处于文本的顶部并且必须再次阅读。
所以我需要以某种方式检查用户是否正在阅读,如果他这样做则清除间隔。
我知道我可以创建一个切换,以便用户可以手动清除间隔,但我不想尝试更智能的方法。
我的方法是检查计时器内部,div是否聚焦,如果是,则清除Interval。
getLogs = setInterval
(
function()
{
if ($("div#log").is(":focus"))
{
clearInterval(getLogs);
}
else
{
//ajax request
}
},
5000
);
但$("div#log").is(":focus")
始终返回false
。
我也试过$("div#log").is(":active")
,但这没有定义。
答案 0 :(得分:2)
我建议你使用jQuery的.scrollTop()方法来检查是否有scrollTop!== 0在这种情况下你可以假设用户已经在元素中滚动并且正在读取它。
getLogs = setInterval
(
function()
{
if ($("div#log").scrollTop() > 0)
{
clearInterval(getLogs);
}
else
{
//ajax request
}
},
5000
);
然后你可以在一段时间之后引入一些逻辑来恢复计时器(假设某个时候用户会继续前进 - 这是一个非常快速但不稳定的解决方案)或者通过检查你的日志文件高度是否相同as .scrollTop()+包含div高度,在这种情况下,用户已读到文档的末尾。