在观察到一个元素后再次调用 IntersectionObserver 回调?

Cyb*_*rAP 1 javascript intersection-observer

我正在观察消息并使用消息时间戳跟踪这些观察结果。这些观察有一个重要条件:如果页面上没有客户端活动(光标不移动,或者他没有输入任何内容),则跟踪时间戳不应更新。客户经常收到一条新消息,但没有任何活动。这意味着一旦完全观察到该元素,Observer 就会跳过该元素。但是当用户实际提供一些活动时,不会重新观察该元素,这意味着除非比率发生变化,否则永远不会再次调用观察者回调。我如何告诉 IS 重新计算所有观察以触发我的回调?

手动“重新观察”元素的问题在于,如果元素已经在交叉边界内,则永远不会调用回调。

一些伪代码例如:

IS.callback = function(entries, observer){
    for (var entry in entries)
    {
        if (activity && entries.hasOwnProperty(entry))
        {
            if (lastTimestamp < entries[entry].data.timestamp)
                lastTimestamp = entries[entry].data.timestamp;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

Cyb*_*rAP 5

解决方案非常简单:移除所有观察者并再次观察元素。然后调用startObserve();任何活动更改。为简单起见,这里使用 jQuery。

function startObserve()
{
    IS.targets =
        $('#messages .message')
        .each(function(index, target){
            IS.observer.unobserve(target);
            IS.observer.observe(target);
        });
}
Run Code Online (Sandbox Code Playgroud)