2012-01-08 36 views
0

私はカウントダウンタイマーを作成するシンプルなJavascript関数(curteousy:codecall.net)を作成しました。Objectify Javascript - Javascript関数を複数回実行する方法

実行するとうまくいきますが、ページに複数のタイマーが必要です。

私は別のdivの中に関数を配置すると、画面上に数字が表示されますが、最後の関数の1つのみが実際にカウントダウンします。

I have placed a link to the code here in JsFiddle何らかの理由で実行したくないが動作します。私はそれの複数のインスタンスが必要です。

すべてのヘルプははるかに高く評価されて、あなたはすべてのグローバル名前空間で、それを建て事前

+0

jsFiddleが自動的に 'onload'ハンドラにラップするため、動作しないのが原因です。 – Ryan

+2

ここにjsFiddleの問題が修正されています:http://jsfiddle.net/minitech/s7x2d/2/ – Ryan

+0

jsFiddleの問題をソートしてくれてありがとう。実際に2つのインスタンスを実際に作成する方法はありません – user866190

答えて

1

で感謝の方法は、それは非常に難しい2のタイマーを組み込むことができます。代わりに、再利用可能なオブジェクトコンストラクタを使用するだけです。 Demo here

function Countdown(element, time) { 
    this.element = element; 
    this.time = time; 
} 

Countdown.time = function() { 
    return new Date().getTime()/1000; 
}; 

Countdown.formatRemaining = function(timeRemaining) { 
    function fillZero(n) { 
     return n < 10 ? '0' + n : n.toString(); 
    } 

    var days = timeRemaining/60/60/24 | 0; 
    var hours = timeRemaining/60/60 | 0; 
    var minutes = timeRemaining/60 | 0; 
    var seconds = timeRemaining | 0; 

    hours %= 24; 
    minutes %= 60; 
    seconds %= 60; 

    return days + ' day' + (days === 1 ? '' : 's') + ' ' + fillZero(hours) + ':' + fillZero(minutes) + ':' + fillZero(seconds); 
}; 

Countdown.prototype.update = function() { 
    var timeRemaining = this.time + this.start - Countdown.time(); 

    if(timeRemaining > 0) { 
     this.element.innerHTML = Countdown.formatRemaining(timeRemaining); 
    } else { 
     this.element.innerHTML = "Time's up!"; 

     if(this.timer) { 
      clearInterval(this.timer); 
      this.timer = null; 
     } 
    } 
}; 

Countdown.prototype.start = function() { 
    var countdown = this; 

    this.start = Countdown.time(); 
    this.timer = setInterval(function() { 
     countdown.update(); 
    }, 1000); 

    this.update(); 
}; 
+0

ありがとうございましたminitech、私はjavascriptを初めて使用しています。これをPHPのforeachループから実行したいので、ループの各要素に対して別々のインスタンスを作成しますか?または私は彼らがjavascriptファイルになるでしょう... – user866190

+0

@ user866190:それは多目的なクラスです、あなたは以前と同じようにほぼ使えます。 '新しいカウントダウン(document.getElementById(elementId)、timeInSeconds).start();'と同じ場所にあります。必要なら。しかし、JavaScriptをさらに使い始めるには、* HTMLクラス*を使用してこれを達成する必要があります。 – Ryan

関連する問題