当用户在屏幕上拖动鼠标光标并单击按钮时,我会发出一系列鼠标事件。我想对这些事件执行成对操作,并且可以使用
Buffer
来执行此操作,例如,
var subscription = mouseDragging
.Buffer(2, 1)
.Subscribe(buffered => // Do stuff );
我还可以访问当拖动操作停止时发出的另一个可观察对象(用户不再单击按钮)。发生这种情况时,即使缓冲区中只有一个项目,我也希望缓冲区窗口关闭(我基本上需要刷新缓冲区以准备下一个拖动事件流,而不是在其中留下“剩余”项目)。我怎样才能做到这一点?
我认为可能的选择是:
拖动完成时使用
TakeUntil
来完成缓冲流,类似
var subscription = mouseDragging
.Buffer(2, 1)
.TakeUntil(dragComplete)
.Subscribe(buffered => // Do stuff );
但要使用上述内容,我需要在完成后重新订阅 - 不知道如何做到这一点?
以某种方式定义一个可观察的关闭选择器与缓冲区计数,类似这样(显然不正确)
var subscription = mouseDragging
.Buffer(2, 1, dragComplete)
.Subscribe(buffered => // Do stuff );
还有其他我没想到的方法吗?
combineLatest
它将发出每个流的最新值,这样您就可以在 dragComplete
发出时拍摄快照。
注意:不确定您使用的是什么语言,但它看起来像这样。
var subscription = combineLatest(
mouseDragging
.Buffer(2, 1),
dragComplete,
)
.Subscribe(([buffered, dragCompleteData]) => { // Do stuff });