2014-10-19 46 views
0

我創建了this clock,在空間保持期間應該暫停。但是我的Js技能非常糟糕,所以我有點失落。時鐘是1到5個時鐘。這意味着每秒鐘過去5秒鐘。當空間被保持時,讓我的1:5時鐘停止

 var clock = new Clock("clock"); 
     clock.start(); 

     function Clock(id) { 
      var clock = this; 
      var timeout; 
      var time; 

      this.hours = 7; 
      this.minutes = 10; 
      this.seconds = 0; 
      this.stop = stop; 
      this.start = start; 
      var isStarted = true; 

function Click() { 
if (isStarted) { 
stop(); 
} 
else 
{ 
start(); 
} 
} 


      var element = document.getElementById(id); 

      function stop() { 
       clearTimeout(timeout); 
      } 

      function start() { 
       timeout = setTimeout(tick, 0); 
       time = Date.now(); 
      } 

      function tick() { 
       time += 1000; 
       timeout = setTimeout(tick, time - Date.now()); 
       display(); 
       update(); 
      } 

      function display() { 
       var hours = clock.hours; 
       var minutes = clock.minutes; 
       var seconds = clock.seconds; 

       hours = hours < 10 ? "0" + hours : "" + hours; 
       minutes = minutes < 10 ? "0" + minutes : "" + minutes; 
       seconds = seconds < 10 ? "0" + seconds : "" + seconds; 

       element.innerHTML = hours + ":" + minutes + ":" + seconds; 
      } 

      function update() { 
       var seconds = clock.seconds += 5; 

       if (seconds === 60) { 
        clock.seconds = 0; 
        var minutes = ++clock.minutes; 

        if (minutes === 60) { 
         clock.minutes = 0; 
         var hours = ++clock.hours; 

         if (hours === 24) clock.hours = 0; 
        } 
       } 
      } 
     } 
+0

真棒文件title =)ASCII加載器是最好的。 – Rudie 2014-10-19 18:32:16

+0

哈哈。是啊!看起來很棒! :D – andreglud 2014-10-19 18:36:08

+0

您正在尋找'onkeydown'和'onkeyup'事件,並且可能在'tick()'內部有一個'paused'標記。 (我最喜歡的功能也是!) – Rudie 2014-10-19 18:37:23

回答

0
  • 一些與空格鍵:關鍵事件(可能keypress,這是最好的)
  • 一些與持有空格鍵:沒有按鍵,但​​和keyup
  • 一些與暫停計時器:清算+重置或暫停標誌

更新計時器/股票代碼,所以它只有蜱當沒有暫停:

var paused = false; 
function tick() { 
    time += 1000; 
    timeout = setTimeout(tick, time - Date.now()); 
    if (!paused) { 
     display(); 
     update(); 
    } 
} 

,然後設置paused標誌:因爲您使用Date.now()setTimeout,所以也許這將使它

document.onkeydown = function(e) { 
    if (e.keyCode == 32) { 
     paused = true; 
    } 
} 
document.onkeyup = function(e) { 
    paused = true; 
} 

我不知道時間,跳過onkeyup後跳。我相信你可以把那部分弄清楚。畢竟這是你的代碼。

您的'班'有一個非常奇怪的範圍,所以tick無法通過this訪問對象屬性。示例顯示了公共方法改變私人財產:http://jsfiddle.net/rudiedirkx/tej4pvm9/1/

如果你想一類,你應該使用JS的原型,所以this的作品,你不重新定義每個實例新的私有方法:http://jsfiddle.net/rudiedirkx/tej4pvm9/2/

+0

因此,它的結局就像這樣:http://pastebin.com/zTTsqTCx 文件更新爲:www.andrebertel.com/mbb/started – andreglud 2014-10-19 19:15:42

+0

您有2個「滴答」功能。並且在對象構造函數中添加事件監聽器通常不是一個好主意。 – Rudie 2014-10-19 19:18:39