setTimeout に問題があります。
すべての主要なブラウザーでは正常に動作しますが、IE では動作しません... Facebook アプリのパズルを作成しています。プレイヤーがスタートボタンを押すと、タイマーが1ゲームのプレイ時間をカウントし始めます。最初は setInterval を使用してタイマーを増やしましたが、Facebook スクリプトの協力により、ゲームの終了時に約 2 秒遅れました。次に、タイマーの精度を高めるためのスタックオーバーフローのトリックを見つけました 。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 秒の差さえあります!
ゲーム中のIEでは、ユーザーがマウスダウンしている場合にのみ機能します... :/
パズルをドラッグするには、jQuery ドラッグ アンド ドロップ プラグインを使用します。少なくとも非常に役立つ情報は、正確なタイマーを達成する方法です。