2017-03-31 32 views
5

我讓用戶滾動頁面,並在每個滾動事件 - 我檢查是否有一個新的項目在視口
如果有,我做了一些操作這些新項目 - 現在無關)。RxJS - 油門後的反彈事件?

所以我有這樣的事情:

const observable = Rx.Observable.fromEvent(window, 'scroll'); 

    const subscriber = observable.throttleTime(300 /* ms */).subscribe(
      (x) => { 
      console.log('Next: event!'); 
      }, 
      (err) => { 
      console.log('Error: %s', err); 
      }, 
     () => { 
      console.log('Completed'); 
      }); 

此代碼工作正常,我的確看到每個300毫秒後的消息。

但是有一個問題。用戶可能會在沒有完成300毫秒的情況下滾動(事件將不會被提升),並且滾動時新項目可見。

這就是我需要的debounce方法。 (這意味着「在最後一次事件的X毫秒後 - 引發事件」

這正是我所需要的。

I've tried this

const subscriber = observable.throttleTime(300 /* ms */).debounceTime(350).... 

但我只看到了去抖事件。

問題

我如何使用油門和油門的結束 - 附上去抖?

+0

我認爲解決方案將是非常接近[此答案](http://stackoverflow.com/a/43104131/6680611)。 – cartant

+0

檢查是否合併兩個流:節流,去抖適合你https://plnkr.co/edit/lHYVxSSrYA05wBWVqnqr?p=preview –

+0

@YuryTarabanko的確。謝謝。請把它作爲答案發布(如果你想) –

回答

5

你可以合併兩個流:節流,去抖成一個使用mergeDemo

const observable = Rx.Observable.fromEvent(window, 'scroll'); 

    const subscriber = observable 
     .throttleTime(300 /* ms */) 
     .map(() => 'throttle') 
     .merge(observable 
       .debounceTime(350) 
       .map(() => 'debounce') 
    ) 
     .subscribe(
      (x) => { 
      console.log('Next: event!', x); 
      }, 
      (err) => { 
      console.log('Error: %s', err); 
      }, 
     () => { 
      console.log('Completed'); 
      });