Вызовите обратный вызов IntersectionObserver снова после того, как он обнаружил элемент?
Я наблюдаю за сообщениями и отслеживаю эти наблюдения, используя временные метки сообщений. Для этих наблюдений есть важное условие: временная метка отслеживания не должна обновляться, если на странице нет активности клиента (курсор не перемещается или он ничего не печатает). Довольно часто клиент получает новое сообщение, но не имеет активности. Это означает, что 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;
}
}
};
1 ответ
Решение было довольно простым: удалить всех наблюдателей и еще раз наблюдать за элементами. Тогда позвони startObserve();
на любое изменение активности. Использование jQuery здесь для простоты.
function startObserve()
{
IS.targets =
$('#messages .message')
.each(function(index, target){
IS.observer.unobserve(target);
IS.observer.observe(target);
});
}