2012-04-25 104 views
4

我正在製作一個計數器,它在文檔聚焦時倒計時。它在模糊時停止倒計時。

它在FF中工作,但在Safari和Chrome中,計數器根本不工作。

Safari/Chrome是否存在兼容性問題?

我所用的全部是$(document).blur()$(document).focus(),並且在$(document).ready()塊內都有。

var tm; 
$(document).ready(function(){ 

     var seconds = 50; 
     $('#timer').html(seconds); 
     countdown(); 

    $(window).focus(function(){ 
     function countdown(){ 
     if (seconds > 0) { 
      seconds--; 
      $('#timer').text(seconds); 
      tm = setTimeout(countdown,1000); 
      } 
     if (seconds<=0){ 
      $('#timer').text('Go'); 
      } 
     }); 



    $(window).blur(function(){ 
     clearTimeout(tm); 
     seconds++; 
     $('#timer').text(seconds); 

    }); 
}); 

回答

11

我一直使用$(window).focus()$(window).blur()。改爲嘗試這些。另外,請注意,在FF和IE中,「焦點」事件觸發〜文檔加載,而在Chrome和Safari中,只有在窗口失去焦點並現在重新獲得焦點時纔會觸發。

UPD:現在你粘貼你的代碼,我把它改造,以(希望)適合你的目的:

var tm; 
var seconds = 50; 
var inFocus = true; 

function countdown() { 
    if (seconds > 0) { 
     seconds--; 
    } 

    if (seconds <= 0) { 
     $('#timer').text('Go'); 
    } 
    else { 
     $('#timer').text(seconds); 
     tm = setTimeout(countdown, 1000); 
    } 
} 

$(function() { 
    $('#timer').html(seconds); 
    countdown(); 

    $(window).focus(function() { 
     if(!inFocus) { 
      countdown(); 
     } 
    }); 

    $(window).blur(function() { 
     inFocus = false; 
     clearTimeout(tm); 
     seconds++; 
     $('#timer').text(seconds); 
    }); 
}); 
+0

您好,感謝您的答覆。我已經試過你的方式。它只適用於第二個焦點。但是計數器不能從(window).focus()開始。有沒有辦法解決,即使它需要更多的代碼?非常感謝 – alexx0186 2012-04-25 23:30:32

+0

我已經解釋了不算Chrome的第一個焦點的原因。我用跨瀏覽器解決方案更新了我的答案(或者我認爲)。 – 2012-04-25 23:35:28

+0

嗨,感謝您的解決方案。我只是不明白我應該在if語句中加入什麼。 '// count = 1;'和'// count ++;'有什麼區別?非常感謝你的幫助。問候 – alexx0186 2012-04-26 00:40:55

相關問題