RxJs 无限滚动触发器延迟
RxJs Infinite scrolling trigger with delay
我想在用户按住底部滚动条超过 1 秒时触发调用以获取新数据。我让触发器立即工作。
这是代码。
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 的菜鸟。谢谢
假设 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
事件发生在指定的延迟之后才应该发出值,这似乎是您正在寻找的。
基本上,当滚动的 observable 发出一个值时(即当用户到达底部时),flatMap
operator 生成一个仅生成一个值(滚动数据)的 observable IFF 下一个 up
事件在 1.000 毫秒延迟后发生。如果没有,则可观察对象已完成,因此不会发出任何值。
我还没有测试过,但我想这应该行得通。让我知道这是否有效。
我想在用户按住底部滚动条超过 1 秒时触发调用以获取新数据。我让触发器立即工作。 这是代码。
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 的菜鸟。谢谢
假设 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
事件发生在指定的延迟之后才应该发出值,这似乎是您正在寻找的。
基本上,当滚动的 observable 发出一个值时(即当用户到达底部时),flatMap
operator 生成一个仅生成一个值(滚动数据)的 observable IFF 下一个 up
事件在 1.000 毫秒延迟后发生。如果没有,则可观察对象已完成,因此不会发出任何值。
我还没有测试过,但我想这应该行得通。让我知道这是否有效。