目的
間隔をとってループを回したい。
ループを止めたり、間隔を変更したりしたい。
使い方
例として下記の関数をループさせます。
sample_function_to_loop
function yourFunction() {
// some process
}
ループ開始
5秒間隔で実行させます。
var managedLoop =
new IntervalLoopManager(
yoruFunction,
{ interval: 5000 }
)
または
var managedLoop = new IntervalLoopManager( yourFunction )
managedLoop.start({ interval: 5000 })
実行間隔時間の変更
7秒間隔に変更します。
すぐに変えたい場合
managedLoop.restart({ interval: 7000 })
今のループが終わってからで良い場合
managedLoop.assignValues({ interval: 7000 })
ループ停止
managedLoop.stop()
ループ開始・再開
managedLoop.start()
ループのリセット
managedLoop.restart()
ループの動作判定
if ( managedLoop.isRunning() ) {
console.log('running')
} else {
console.log('is not running')
}
説明は以上です。
ソースコード
バクや改善点があれば、pull requestを投げていただくか、コメントで教えて頂けると嬉しいです。
https://github.com/asukiaaa/interval_loop_manager
interval_loop_manager.js
var IntervalLoopManager = function(functionToLoop, options) {
this.functionToLoop = functionToLoop
this.assignValues(options)
this.start()
}
IntervalLoopManager.prototype.start = function(options) {
this.assignValues(options)
if ( typeof this.interval === 'undefined' ||
this.isRunning() ) {
return
}
var that = this
function loop(){
that.functionToLoop()
that.timeout = setTimeout(loop, that.interval)
}
loop()
}
IntervalLoopManager.prototype.stop = function() {
if ( this.isRunning() ) {
clearTimeout(this.timeout)
this.timeout = null
}
}
IntervalLoopManager.prototype.restart = function(options) {
this.stop()
this.start(options)
}
IntervalLoopManager.prototype.assignValues = function(options) {
if ( typeof options !== 'undefined' ){
if ( typeof options['interval'] !== 'undefined' ) {
this.interval = options['interval']
}
}
}
IntervalLoopManager.prototype.isRunning = function(options) {
return ( typeof this.timeout !== 'undefined' &&
this.timeout != null )
}
以上、誰かのお役に立てれば幸いです。
参考