2010-12-01 3 views
7

jQuery를 사용하여 빌드 된 UI 탭에서 작업하고 있습니다. 한 가지 문제를 제외하고는 모두 작동합니다. 트리거 ("클릭")를 수행하는 함수를 실행하는 setInterval을 수행하여 5000 밀리 초 후에 다음 탭으로 이동했습니다. 그것은 각 탭을 통해 잘 실행됩니다, 문제는 사용자가 탭을 수동으로 클릭하면 setInterval에 대한 타이머가 0에서 다시 시작되지 않는다는 것입니다. 예를 들어, 사용자가 0 밀리 초에 tab1에서 시작하여 tab2를 클릭하면 2000 밀리 초이면 setInterval은 0으로 돌아 가지 않고 2000에서 시작하여 5000 밀리 초로 실행되고 이후에 tab3으로 이동합니다. 왜 그런 일이 일어 났는지 이해합니다. clearInterval()을 수행하고 완전히 새로운 setInterval()을 만들지 않고 setInterval 타이밍을 다시 시작할 수있는 방법이 있는지 궁금합니다. 모든 통찰력은 인정 될 것이다. 답장에 대한Javascript/jQuery (clearInterval없이)에서 setInterval() 다시 시작

업데이트

감사합니다 - 나는 내가 위해 clearInterval 완전히 setInterval을 중지 할 수있는 방식으로 코드를 작성하는 방법에 문제가 있었기 때문에 위해 clearInterval이었다 사용하여 피하려고 한 이유. 코드는 사용자가 탭을 클릭 할 때마다 추적하도록 설정됩니다. 문제는 자동 변경 기능이 트리거 ('클릭')를 사용하므로 탭이 자동 변경 될 때 작성한 clearInterval 함수를 실행한다는 것입니다. 그 자체만으로도 꽤 잘 돌아가는 것처럼 보이지만 일단 사용자가 탭을 클릭하면 setInterval은 비정상적으로 동작하고 예기치 않게 탭을 전환합니다. 나는 몇 가지 setInterval이 한 번에 실행되고 있다고 생각한다. 코드를 보자. (이미 짐작하지 못했다면, 나는 javascript/jquery에서 꽤 새로운 것이다.) 기능적이기 때문에 부품을 주석 처리했지만, 의도 한대로 작동하지는 않습니다 (첫 번째 게시물에서).

// auto change tabs 
      if(options.interval) { 

       function timerCom() { 
        if(!$(".controller").hasClass('paused')) { 
         var i = $(".tab-current > a").attr("rel"); 
         //alert(i); 
         if(i == 3) {i = 0}; 
         $container 
          .find('a') 
          .eq(i) 
          .trigger('click'); 
        }  
       } 

       //$("#promo-items > li > a").click(function() { 
        //var timer; 
        //if(timer != null) {clearInterval(timer);} 
        timer = setInterval(timerCom, options.interval); 

       //}); 

      } 
+0

안녕하세요!추가 정보를 제공해야하는 경우 질문을 편집하십시오. 답변에 대한 특정 질문에 대한 설명을 사용하십시오. SO는 포럼이 아니므로 응답 필드는 질문에 대한 답변을 위해 엄격하게 예약되어 있습니다. –

답변

8

아니, 타이머를 지우지 않고 setInterval에 의해 설정된 타이머를 다시 시작하는 방법이 없습니다.

3

간격 또는 시간 제한을 실제로 변경할 수 없으며이를 지울 수만 있습니다. 즉, 간격을 지우는 함수를 만드는 것이 간단한 것이어야하고 새로운 시간 값으로 즉시 새 것을 시작합니다.

var intervalID; 
var resetTimer = function() { 
    if (intervalID) { clearInterval(intervalID) }; 
    intervalID = setInterval(function() { 
    console.log('doing stuff!'); 
    }, 5000); 
}; 
+5

중괄호를 사용하면 코드가 거의 읽을 수 없게됩니다. P. 괄호는 자체 회선에 있어야합니다. –

+2

저는 논쟁에 관심이 없습니다. 사실 Google의 코딩 표준에는 "암시 적 세미콜론 삽입으로 인해 항상 중괄호를 열 때마다 같은 줄에 중괄호를 시작합니다. " http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml – DaveWalley

1
timer = setInterval(function() { 
    timerCom(); 
}, options.interval); 
0

는이 게시물이 아니라 2 년 이상 오래 알고 있지만 난 그냥 지금 비슷한 문제로 달리고, 나는 해결책을 찾아 냈다.

설정된 시간이 지나면 자동으로 다음 이미지로 이동하는 이미지 스크롤러를 쓰고 있었고 탐색 버튼을 클릭 할 때마다 전환이 두 번 이동했습니다.

이 간격 변수를 확인 (timer 귀하의 경우) 다소 글로벌 :

여기 내 솔루션입니다.

즉, options 섹션 (앞에서 정의한 다음 나중에 할당했다고 가정)에 null timer 변수를 추가하십시오. 당신은 클릭 이벤트를 처리 할 때

var options = { 
'interval', 
//Other variables 
'timer', 
}; 

그런 다음, 두 번 clearInterval를 호출합니다.

$("#promo-items > li > a").click(function() { 

if(options.timer != null) { 
clearInterval(options.timer); 
clearInterval(options.timer); 
} 

options.timer = setInterval(timerCom, options.interval); 

}); 

나를 위해 부적처럼 일했습니다.

다시 말하면 너무 늦어서 죄송합니다.