IntersectionObserver 观察到一个元素后再次调用回调?
Call IntersectionObserver callback again after it has observed an element?
我正在观察消息并使用消息时间戳跟踪这些观察结果。这些观察有一个重要条件:如果页面上没有客户端 activity(光标不动,或者他没有输入任何内容),则跟踪时间戳不应更新。客户端经常收到一条新消息,但没有 activity。这意味着一旦 Observer 被完全观察到,它就会跳过该元素。但是当用户实际提供一些 activity 时,这个元素不会被重新观察到,这意味着除非比率发生变化,否则永远不会再次调用观察者回调。我如何告诉 IS 重新计算所有观察值以触发我的回调?
手动 're-observing' 元素的问题在于,如果元素已经在交集范围内,则永远不会调用回调。
一些伪代码例如:
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;
}
}
};
解决方案非常简单:删除所有观察者并再次观察元素。然后在任何 activity 更改时调用 startObserve();
。为简单起见,此处使用 jQuery。
function startObserve()
{
IS.targets =
$('#messages .message')
.each(function(index, target){
IS.observer.unobserve(target);
IS.observer.observe(target);
});
}
我正在观察消息并使用消息时间戳跟踪这些观察结果。这些观察有一个重要条件:如果页面上没有客户端 activity(光标不动,或者他没有输入任何内容),则跟踪时间戳不应更新。客户端经常收到一条新消息,但没有 activity。这意味着一旦 Observer 被完全观察到,它就会跳过该元素。但是当用户实际提供一些 activity 时,这个元素不会被重新观察到,这意味着除非比率发生变化,否则永远不会再次调用观察者回调。我如何告诉 IS 重新计算所有观察值以触发我的回调?
手动 're-observing' 元素的问题在于,如果元素已经在交集范围内,则永远不会调用回调。
一些伪代码例如:
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;
}
}
};
解决方案非常简单:删除所有观察者并再次观察元素。然后在任何 activity 更改时调用 startObserve();
。为简单起见,此处使用 jQuery。
function startObserve()
{
IS.targets =
$('#messages .message')
.each(function(index, target){
IS.observer.unobserve(target);
IS.observer.observe(target);
});
}