【发布时间】:2020-07-23 17:09:04
【问题描述】:
我想知道是否有人可以帮助我从理论上提出解决方案。我从一个车轮事件创建一个 Observable,阻止默认操作,将其限制 200 毫秒,映射 deltaY(我可以用它来确定方向),然后我分享它。
我的问题是它发出的值超出了我的需要,从而造成即使在发生所需操作后我的订阅者仍会继续触发的情况。我是 RxJS 的新手,所以请多多包涵,但是......有没有办法让我在 X 时间内获取一系列值中发出的“第一个”值并且没有可观察到的完整值?
下面是代码。
import { fromEvent } from 'rxjs';
const wheel$ = fromEvent(document, 'wheel')
.pipe(
tap((event) => event.preventDefault()),
// throttleTime(200), /* I have tried throttling and debouncing but that doesn't work - values will continue to be emitted */
map((event) => event.deltaY),
share()
)
// handles scrolling down //
wheel$.pipe(filter((val) => val > 0))
.subscribe((event) => {
if (this.props.isScrolling) return
this.scrollDown();
})
【问题讨论】:
-
这很有趣。我试过了,它也对我不起作用,但是当我将事件从滚轮更改为单击时,
throttleTime工作。 -
我的错,文件一定没有保存,刷新 Stackblitz 工作。在应用中滚动时查看控制台日志here。
-
@SamHerrmann 感谢您花时间解决这个问题。我看了你的 Stackblitz ......如果你执行一个明显的滚动,第二个事件将在其中不解决这个问题。