Вы можете использовать оператор scan
вместе с distinctUntilChanged
:
return fromEvent(window, 'scroll').pipe(
debounceTime(25),
map((e: any) => e.path[1].scrollY),
scan((prev, curr) => Math.max(prev, curr), 0),
distinctUntilChanged()
)
Что происходит, если наблюдаемое изменено так, чтобы оно содержало максимальное значениетекущей и предыдущей итерации (и имеет значение 0 в качестве начального значения).
После этого distinctUntilChanged()
гарантирует, что наблюдаемые не будут повторять повторяющиеся события.
Этогарантирует, что вы будете получать только значения, которые больше, чем предыдущий.