2014-01-19 3 views
0

setTimeout() 메소드가 포함 된 함수가 있습니다.활성 타이머 확인 (setTimeout)

저는이 기능을 호출하는 버튼이 있으므로이 버튼을 여러 번 눌러 원하는만큼이 기능을 호출 할 수 있습니다.

활성 타이머가있는이 함수의 다른 인스턴스가없는 경우에만이 함수를 실제로 실행할 수 있습니까?

+2

http://jsfiddle.net/kukiwon/FCuNh/ 우리에게 코드를 보여, 당신은 분명 이벤트 처리기와에 대한 뭔가를 이미 시간 초과. – adeneo

답변

2

이전에이 타이머를 설정했는지 여부와 여러 단추를 누른 상태에서 지속되는 범위를 가진 일종의 변수를 사용하여 활성 상태인지 여부를 추적해야합니다.

이 단추로 시작한 타이머가 아직 실행 중인지 여부를 알려주는 기본 제공 기능은 없습니다. 당신은 당신 자신을 만들어야 만합니다. 다음과 같이 작동 할 수 있습니다.

var buttonTimer; 
function myButtonClick() { 
    if (!buttonTimer) { 
     buttonTimer = setTimeout(function() { 
      buttonTimer = null; 
      // put your timer code here 
     }, 2000); 
    } 
} 

현재 활성화 된 타이머가있는 한 버튼 클릭을 무시합니다. 실행중인 타이머가 없으면 새 타이머가 설정됩니다.

당신이 실제 타이머 ID를 추적하고 있기 때문에, 당신은 너무 같은 (예 : 정지 버튼 등) 이전 타이머를 취소하는 등의 동작을 구현하거나 취소하여 새로운 시간 간격으로 타이머를 재설정 할 수있는 자유가있다 이전 타이머를 누른 다음 새 타이머를 설정하십시오.

var Timer = function() { 
    var self = this; 
    this.running = false; 
    this.run = function() { 
     if(!self.running) { 
      self.running = true; 
      console.log('starting run'); 
      setTimeout(function() { 
       self.running = false; 
       console.log('done running!'); 
      }, 5000); 
     } else { 
     console.log('i was running already!'); 
     } 
    } 
    return this; 
} 
var aTimer = new Timer(); 

을 그리고 테스트 목적으로 버튼을 추가 :

0

이 시도

<button onclick="aTimer.run()">Run!</button> 

가 바이올린 :