10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

javascriptでループを管理するクラス「IntervalLoopManager」を作ってみました

Last updated at Posted at 2015-11-19

目的

間隔をとってループを回したい。
ループを止めたり、間隔を変更したりしたい。

使い方

例として下記の関数をループさせます。

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 )
}

以上、誰かのお役に立てれば幸いです。

参考

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?