检查带有滚动条的div当前是否由用户呈现

时间:2016-09-12 14:36:34

标签: javascript jquery

我有一个带滚动条的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"),但这没有定义。

1 个答案:

答案 0 :(得分:2)

我建议你使用jQuery的.scrollTop()方法来检查是否有scrollTop!== 0在这种情况下你可以假设用户已经在元素中滚动并且正在读取它。

getLogs = setInterval
    (
        function()
        {       
            if ($("div#log").scrollTop() > 0)
            {
                 clearInterval(getLogs);
            }
            else
            {
                 //ajax request
            }
        },
        5000
    );

然后你可以在一段时间之后引入一些逻辑来恢复计时器(假设某个时候用户会继续前进 - 这是一个非常快速但不稳定的解决方案)或者通过检查你的日志文件高度是否相同as .scrollTop()+包含div高度,在这种情况下,用户已读到文档的末尾。