我有setTimeout的問題。不準確的setTimeout,它只適用於mousedown
在所有主流瀏覽器中,它工作正常,但不在IE中... 我正在創建一個Facebook應用程序謎題。當玩家按下開始按鈕時,計時器開始計算他玩一場遊戲的時間。 開始時我使用setInterval來增加計時器,但與Facebook腳本的合作在遊戲結束時延遲了大約2秒。然後我發現在計算器技巧提高計時器的準確性:setInterval timing slowly drifts away from staying accurate 並再次 - 沒有臉書它工作正常,沒有延遲顯示。有了Facebook,它仍然有延誤。 現在凝析可能會讓你感興趣的信息你: 當用戶點擊開始,然後我創建新的日期作爲startTime。 當用戶結束遊戲腳本時創建finalTime新日期,然後減去finalTime - startTime。
在代碼存在的setTimeout:
(...)
f : function() {
var sec_time = Math.floor((puzzle.nextAt - puzzle.startTime)/1000);
$('.timer').html(sec_time);
if (!puzzle.startTime) {
puzzle.startTime = new Date().getTime();
puzzle.nextAt = puzzle.startTime;
$('.timer').html('0');
}
puzzle.nextAt += 100;
puzzle.to = setTimeout(puzzle.f, puzzle.nextAt - new Date().getTime());
}
(...)
當在正確的位置處的用戶最後拼圖然後調用clearTimeout(puzzle.to);
我現在有2個問題:
不準確的時間,在IE瀏覽器也可以是連得7第二個區別!/
要拖動的困惑我使用jQuery拖&降插件:
在IE比賽期間,當用戶有鼠標按下...它才起作用。 至少非常有用的信息將是如何實現準確的計時器。
您可以使用jQuery onReady來設置您的開始時間,並且每運行一個計時器(例如)0.5秒來運行一個計時器以輪詢開始時間和當前時間之間的差異。如果您在腳本中設置了內聯開始時間,則無法保證其執行時間,特別是在使用多個JS SDK時。 –
@Connor感謝您的回覆:)'您可以使用jQuery onReady'您是否應該將腳本放在$(document).ready(function(){...})中; ?我的所有腳本(JS SDK除外)都位於頁面的底部,因此它們在所有DOM元素之後加載,但我不確定是否理解您正確。你建議每0.5秒運行計時器,就像你在代碼中看到的那樣,我每100ms運行一次計時器來計算它,所以我認爲它更好。有什麼辦法可以「切斷」這個定時器,這樣它就不會干擾FB JS SDK和我的拖放操作?或者有什麼更好的方法來實現我想要的,我不知道? – Rob
jQuery部分是正確的。根據上面增加的信息,我會添加其餘的作爲可能的答案。 –