2012-06-21 3 views
0

나는 DOM 이벤트 (의 keyup)는 시간 내에 특정 횟수를 발생할 경우 통지하려고에 대한 수신을 사용하여 시간 내에 다수의 특정 DOM 이벤트를 관찰하는 것입니다. 일정 기간 내에 이벤트를 버리는 스로틀이 있다는 것을 알았습니다. 예를 들어, 500ms 내에 텍스트 상자에 대해 keyup 이벤트가 10 번 발생하는 경우에만 알림을 받고 싶습니다.은 가능한 자바 스크립트

답변

0

당신은 클릭의 타임 스탬프를 저장하고 현재 타임 스탬프 10 클릭 전 클릭의 타임 스탬프를 비교하여 그것을 얻을 수 있습니다

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() 
}); 
+0

덕분에,이 작업을 수행합니다. 그러나 이벤트 핸들러를 사용하면 쉽게 수행 할 수 있습니다. 가능하다면 Rx를 사용하여 모든 "타임 스탬프"항목을 처리하고 싶습니다. –

+0

는 지금까지 내가 수신을 사용하지 않은, 그러나, 그러나 나는 살펴 보겠습니다. – Tharabas

0

(난 당신이 여기에 jQuery를 사용하는 가정) groupByUntil 기능으로 500ms 이내에 트리거 된 키 업 이벤트에서 관찰 가능 그룹을 생성 할 수 있습니다. 그런 다음 관찰 가능한 각 그룹에서 이벤트를 계산하십시오. 그룹에 10 개 이상의 이벤트가있는 경우 무언가를하십시오. 요청에 따라

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) 
}); 
관련 문제