2010-12-26 7 views
2

필자가 쓰고있는 플러그인을 마무리하려하지만 해결책을 찾지 못하는 매우 사소한 문제에 난처한 상황입니다. 나는 거의 모든 포럼과 관련된 문제 토론을 추적했다. 어떤 방식 으로든 내가 원하는 일은 나의 플러그인은 사용자가 해지를 처리 ​​할 수 ​​있기를 바라는 타이머를 가지고있다.jQuery 플러그인 내에서 setInterval을 중지하십시오.

(function ($) { 
... 
var defaults = { 
callback : function(){}, 
crossfadeTime : 1000, 
easing : 'linear', 
running : 'true', // Here is where I would like the user to send a parameter 
        // to invoke a different result. i.e. 'false' => clearing 
        // the timer. Such as... 

var timer = setInterval(function(){ 
    // Do Something; 
},3000); 

if(defaults.running == 'false'){ 
    clearInterval(timer); 
} 
+0

: 당신이 죽은 세트에서는 setInterval을 사용하여 경우

,이 트릭을 할 것인가? –

+0

사용자가 타이머를 종료하는 함수를 호출 할 문자열을 전달하여 타이머를 종료 할 수있게하려고합니다. ie (user) running : 'false'=> clearInterval (timer); – Romelus

답변

5

변수를 설정하여 타이머를 중지 할 수있게하려면 정말로 필요합니까? 당신이 이것과 같은 함수를 호출하게 할 수 있습니까?

var TimerModule = (function(){ 
    var timerHandle; 

    var startTimer = function(fnc, interval){ 
     if(timerHandle){ 
      //error, timer already running 
      return; 
     } 
     timerHandle = window.setInterval(fnc, interval); 
    }; 

    var stopTimer = function(){ 
     window.clearInterval(timerHandle); 
     timerHandle = null; 
    }; 

    return { 
     start:startTimer, 
     stop:stopTimer 
    }; 

}()); 

TimerModule.start(function(){ 
    alert("Hieee"); 
}, 1000); 

window.setTimeout(function(){ 
    TimerModule.stop(); 
}, 5000); 

그렇지 않으면이 같은 somethign이 작동합니다 : 그것은 대신 간격의 setTimeout을 사용하고, 실행이 false 인 경우 제한 시간을 재설정하지 않습니다

var defaults = { 
    callback: function() { 
     alert("hi"); 
    }, 
    crossfadeTime: 1000, 
    easing: 'linear', 
    running: 'true' // Here is where I would like the user to send a parameter 
    // to invoke a different result. i.e. 'false' => clearing 
    // the timer. Such as... 
}; 

var timer; 
var timerFunction = function() { 
    if (!defaults.running) { 
     return; 
    } 
    defaults.callback(); 
    timer = setTimeout(timerFunction, 1000); 
}; 

//start the timer 
timerFunction(); 

window.setTimeout(function() { 
    defaults.running = false; 
},5000); 

. 정확히 문제가 무엇인지

var defaults = { 
    callback: function() { 
     alert("hi"); 
    }, 
    crossfadeTime: 1000, 
    easing: 'linear', 
    running: 'true', 
    callbackHandle: null 
}; 

var timer; 
var timerFunction = function() { 
    if (!defaults.running) { 
     window.clearInterval(defaults.callbackHandle); 
     defaults.callbackHandle = null; 
    } 
    defaults.callback(); 
}; 

//start the timer 
defaults.callbackHandle = window.setInterval(timerFunction,1000); 

window.setTimeout(function() { 
    defaults.running = false; 
},5000); 
+0

이 플러그인의 기초는 전체적으로 회전시키고 싶은 이미지 갤러리이기 때문에 반복적으로 실행하는 기능을 원한다는 것입니다. 나는 setTimeout 메서드를 활용하고 동일한 갤러리 효과를 만들 수있는 것처럼 보였습니다. – Romelus

+1

setInterval에 대한 세 번째 옵션을 추가했습니다. – david

+0

위대한 !! 정말 고맙습니다! – Romelus

관련 문제