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

时间:2012-06-21 19:40:09

标签: javascript javascript-events rxjs

如果dom事件(keyup)在一个时间范围内发生了特定次数,我会尝试收到通知。我看到有一个油门在一个时间范围内扔掉了事件,我想算一下。例如,我只想在500ms内为一个文本框发生10次键盘事件时收到通知。

2 个答案:

答案 0 :(得分:0)

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

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

var timestamps = [];
$('.watched').click(function() {
  var now = (new Date).getTime();
  // add the current timestamp in front of the other timestamps
  timestamps.unshift(now);
  if (timestamps.length > 10 && (now - timestamps[10]) < 500) {
    // do whatever you really wanted to do
    clickedTenTimes()
  }
  // clean unneeded timestamps
  while (timestamps.length > 10) timestamps.pop()
});

答案 1 :(得分:0)

您可以使用groupByUntil功能在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)
});