2016-04-09 9 views
1

私はRxを学んでいますので、Rxのメカニックを静かにしていません。コールバックを使ってeaslyでもやりたいのですが、Rxを理解したいと思います。RXjsはソースからデバウンスを取り消します

は私が何をしたいのかデバウンス、イベント500msの上にマウスで、UIインターフェースを表示し、マウスに出てそのインターフェイスを隠すので、私はこのコードを持っている:

var outStream = Rx.Observable.fromEventPattern(
      function add (h) { 
      asset.events.onInputOut.add(function(){ 
       h('out'); 
      }); 
      } 
     ); 

     var overStream = Rx.Observable.fromEventPattern(
      function add (h) { 
      asset.events.onInputOver.add(function(e){ 
       h('over'); 
      }); 
      } 
     ).debounce(500); 


     var source = Rx.Observable.merge(overStream, outStream); 

     source.subscribe(function (x) { 
      console.log(x); 
      }); 

何私がしたいことは何かですこのように:

. 
.mouse over fired after 500ms 
.mouseout 
. 
.mouse over 
.mouse out fired before 500ms trigger cancel mouse over 

事前に感謝の意を表します。

+0

githubのリンクにコードがあります:https://github.com/eralha/angular-phaser/blob/master/js/src/modules/game/classes/camera.js#L78 –

答えて

5

私はこのようなものを使用したい:これは、「それが到着する前に500ミリ秒後に単一の要素をもたらすが、OUTSTREAM要素を生成する場合は聞いて停止することを観測可能に各overStream要素をマップ」と言う

var hoverStream = overStream.flatMapLatest(function() { 
    return Rx.Observable.timer(500).takeUntil(outStream).map(function() { return 'hover'; }) 
}); 

を。これが正常に動作するようにするには、オーバーストリームからdebounceを削除する必要があります(そのようなすべてのイベントの単純なストリームとして保持してください)。

次に、必要な結果ストリームに値をマージできます。

+0

ありがとうございました、コードのリンク:https://github.com/eralha/angular-phaser/blob/master/js/src/modules/game/classes/camera.js#L86 –

+0

魅力的な作品です。ありがとうございました<3。 – Dracco

関連する問題