首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RXJS observables实现_.throttle

使用RXJS observables实现_.throttle
EN

Stack Overflow用户
提问于 2016-07-29 13:58:51
回答 2查看 727关注 0票数 0

我是Rxjs观察点的新手,我需要使用Rxjs实现节流。

在下划线中,我们使用下面的代码行-

代码语言:javascript
复制
_.throttle(functionName, timespan, {trailing : true/false}).

请帮助如何使用可观察对象来做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-30 02:40:31

只需使用throttle运算符。

代码语言:javascript
复制
Rx.Observable.fromEvent(window, 'mousemove')
  .throttle(500)
  .subscribe(x => console.log(x));

它将限制事件,以便在单个500毫秒窗口内只能通过一个事件。

票数 1
EN

Stack Overflow用户

发布于 2016-07-29 14:24:51

看看RxJ中的sample运算符

下面是在div上使用mousemove事件的简单示例。

代码语言:javascript
复制
const source = document.getElementById('source');

Rx.Observable
  .fromEvent(source, 'mousemove')
  .sample(1000)
  .map(event => ({x: event.offsetX, y: event.offsetY}))
  .subscribe(console.log);
代码语言:javascript
复制
#source {
  width: 400px;
  height: 400px;
  background-color: grey;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>

<div id="source"></div>

如果你想使用RxJS实现节流,你可以这样做:

代码语言:javascript
复制
function throttle(fn, delay) {
  const subject = new Rx.Subject();
  
  subject
    .sample(delay)
    .subscribe(args => fn(...args));
  
  return (...args) => subject.onNext(args);
}

const sourceBtn = document.getElementById('source');
const countSpan = document.getElementById('count');
let count = 0;

sourceBtn.addEventListener('click', throttle(() => {
  count++;
                                             
  countSpan.innerHTML = count;
}, 1000));
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>

<button id="source" type="button">click</button> <br>
count = <span id="count"></span>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38651479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档