2015-10-19 44 views
1

我想觸發一個呼叫,以獲得新的數據,當用戶滾動條的底部拇指超過1秒。我有觸發器沒有延遲的工作。 這是代碼。RxJs無限滾動的觸發與延遲

var scrolling = Rx.Observable. 
     fromEvent($('.infinite')[0], 'scroll'). 
     map((se)=> { 
      return { 
       scrollTop:se.target.scrollTop, 
       scrollHeight: se.target.scrollHeight, 
       clientHeight: se.target.clientHeight 
      }; 
     }). 
     filter((x)=> x.clientHeight === x.scrollHeight - x.scrollTop); 


    scrolling.subscribe(
      x => { 
       this.$http.get('/data'). 
        then((res)=>{ 
         _this.infiniteData.push(...res.data); 
        }); 
     }, 
      e => console.log('err', e), 
      _ => console.log('onCompleted')); 

我想有扳機,只得到所謂的新數據,如果用戶在頁面底部留下拇指超過1秒,而不是讓它自動加載新數據,當它到達底部。所以有一個延遲和測試的概念,拇指仍然在底部。這部分我不知道如何實現它,因爲我是RxJs的Noob。感謝

回答

2

假設scrolling是可觀察到的,只有當用戶有在底部的滾動條的拇指發射值。

mouseup$ = Rx.Observable.fromEvent($('.infinite')[0], 'mouseup'); 
// mouseup or keyup or touchend or else 

var getNewData$ = scrolling 
    .flatMap(function (scroll_data) { 
     return Rx.Observable 
      .just(scroll_data) 
      .delay(1000) 
      .takeUntil(mouseup$); 
    }); 

getNewData$應該發射值僅在指定的延遲,這是你彷彿在尋找後up事件發生。

基本上,當滾動可觀察項發出一個值(即,當用戶到達底部)時,運算符產生一個只能產生一個值(滾動數據)的觀察值,IFF在1.000 ms延遲之後發生下一個up事件。如果不是,則可觀測值已完成,因此不會發出任何值。

我沒有測試過,但我想這應該工作。讓我知道如果這是訣竅。