2010-12-26 6 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

私は、タイマーを停止する関数を呼び出す文字列を渡すことによって、ユーザーがタイマーを終了できるようにします。すなわち、(ユーザ)実行中: '偽' => clearInterval(タイマー); – 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の3番目のオプションを追加: – david

+0

素晴らしい!どうもありがとうございます! – Romelus

関連する問題