0

ユーザーが秒単位で値を入力できるページを作成すると、その間隔で ping が鳴ります。また、ping間隔と同期する必要があるタイマーをまとめました。彼らが 5 を入力した場合のように、ping が鳴っているとき、クロックは 5、10、15 などを過ぎているはずです。理由はわかりませんが、サウンドはクロックと完全に同期していないようで、実行時間が長くなるほど悪化します。ご協力いただきありがとうございます!

$(document).ready(function() {

  $('#set_ping').click(function() {
    interval = parseInt($('#ping_val').val()*1000,10);
    $('#ping_alert').text('The ping will sound every ' + interval/1000 + ' seconds.');
  });

  $('#go').click(function() {  
    timer();
    setInterval(sound, interval);

   });

  function sound() {
   $('#audio').append('<embed src="assets/audio/sound88.mp3" autostart="true" hidden="true" loop="false">');    
  }

  var seconds = 0;
  function timer() {setInterval(function() {
    $('#progress').text(seconds++/100);
  }, 10);
 }
});
4

2 に答える 2

0

これは、JavaScript のタイマーがそれほど正確ではないためです。こちらこちらもご覧ください。また、JavaScript はシングルスレッドであるため、タイマーは他に何も実行されていないときにのみ実行されます。ページがビジー状態の場合、実際に実行が「スケジュール」されているものは代わりに「遅延」されます。

于 2013-01-11T18:35:58.103 に答える
0

以下のコードを使用します。

$(document).ready(function() {
var interval;
  $('#set_ping').click(function() {
    interval = parseInt($('#ping_val').val()*1000,10);
    $('#ping_alert').text('The ping will sound every ' + interval/1000 + ' seconds.');
  });

  $('#go').click(function() {  
    timer();
    setInterval(sound, interval);

   });

  function sound() {
   $('#audio').append('<embed src="assets/audio/sound88.mp3" autostart="true"     hidden="true" loop="false">');    
  }

  var seconds = 0;
  function timer() {setInterval(function() {
    $('#progress').text(seconds++/100);
    if(seconds % interval == 0){
       // play music here 
    } 
  }, 10);
 }
});

そのコードでは、コードが時間を更新するときに、変数secondsの倍数がinterval時間間隔を保持している場合、時間 (変数) が聞こえるかどうかもチェックします。注intervalはグローバル変数です

于 2013-01-11T18:35:58.513 に答える