是否可以使用RxforJavaScript在一个时间范围内观察一些特定的dom事件

是否可以使用RxforJavaScript在一个时间范围内观察一些特定的dom事件,javascript,javascript-events,rxjs,Javascript,Javascript Events,Rxjs,如果一个dom事件(keyup)在一个时间范围内发生了特定次数,我试图得到通知。我看到有一个节流阀可以在一个时间范围内丢弃事件,我想计算它们。例如,我只希望在文本框在500毫秒内发生10次按键事件时收到通知。您可以通过保存单击的时间戳并将10次单击前的时间戳与当前时间戳进行比较来实现这一点: (我假设您在这里使用jQuery) var时间戳=[]; $('.watched')。单击(函数(){ var now=(新日期).getTime(); //将当前时间戳添加到其他时间戳之前 时间戳。取消移

如果一个dom事件(keyup)在一个时间范围内发生了特定次数,我试图得到通知。我看到有一个节流阀可以在一个时间范围内丢弃事件,我想计算它们。例如,我只希望在文本框在500毫秒内发生10次按键事件时收到通知。

您可以通过保存单击的时间戳并将10次单击前的时间戳与当前时间戳进行比较来实现这一点:

(我假设您在这里使用jQuery)

var时间戳=[];
$('.watched')。单击(函数(){
var now=(新日期).getTime();
//将当前时间戳添加到其他时间戳之前
时间戳。取消移位(现在);
如果(timestamps.length>10&&(现在-timestamps[10])<500){
//做你真正想做的事
单击时间()
}
//清除不需要的时间戳
而(timestamps.length>10)timestamps.pop()
});

您可以使用功能从500毫秒内触发的按键事件创建可观察组。然后只计算每个可观察组中的事件。如果一组中有十个或更多的活动,那么做些什么

var keyups = $('#input').keyupAsObservable()
    .groupByUntil(
        function(x) { return x.currentTarget.id; },
        function(x) { return x; },
        function(x) { return Rx.Observable.timer(500); }
);

keyups.subscribe(function(obs) {
    obs.count()
    .filter(function(count) { return count >= 10; })
    .subscribe(doSomething)
});

谢谢,这确实符合要求。但是,使用事件处理程序也可以轻松完成。如果可能的话,我想用Rx来处理所有“时间戳”的东西。直到现在我还没有用过Rx,但我会看一看。
var keyups = $('#input').keyupAsObservable()
    .groupByUntil(
        function(x) { return x.currentTarget.id; },
        function(x) { return x; },
        function(x) { return Rx.Observable.timer(500); }
);

keyups.subscribe(function(obs) {
    obs.count()
    .filter(function(count) { return count >= 10; })
    .subscribe(doSomething)
});