与关闭选择器重叠缓冲区

问题描述 投票:0回答:1

当用户在屏幕上拖动鼠标光标并单击按钮时,我会发出一系列鼠标事件。我想对这些事件执行成对操作,并且可以使用

Buffer
来执行此操作,例如,

var subscription = mouseDragging
    .Buffer(2, 1)
    .Subscribe(buffered => // Do stuff );

我还可以访问当拖动操作停止时发出的另一个可观察对象(用户不再单击按钮)。发生这种情况时,即使缓冲区中只有一个项目,我也希望缓冲区窗口关闭(我基本上需要刷新缓冲区以准备下一个拖动事件流,而不是在其中留下“剩余”项目)。我怎样才能做到这一点?

我认为可能的选择是:

  1. 拖动完成时使用

    TakeUntil
    来完成缓冲流,类似

    var subscription = mouseDragging
     .Buffer(2, 1)
     .TakeUntil(dragComplete)
     .Subscribe(buffered => // Do stuff );
    

但要使用上述内容,我需要在完成后重新订阅 - 不知道如何做到这一点?

  1. 以某种方式定义一个可观察的关闭选择器与缓冲区计数,类似这样(显然不正确)

    var subscription = mouseDragging
     .Buffer(2, 1, dragComplete)
     .Subscribe(buffered => // Do stuff );
    
  2. 还有其他我没想到的方法吗?

rxjs reactive-programming system.reactive
1个回答
0
投票

您可以使用

combineLatest
它将发出每个流的最新值,这样您就可以在
dragComplete
发出时拍摄快照。

注意:不确定您使用的是什么语言,但它看起来像这样。

var subscription = combineLatest(
 mouseDragging
 .Buffer(2, 1),
 dragComplete,
 )   
 .Subscribe(([buffered, dragCompleteData]) => { // Do stuff });
© www.soinside.com 2019 - 2024. All rights reserved.