2

曲の長さのカウントダウン用に以下の JavaScript があります。私はphpページでそれを使用します。

私が抱えている問題は、ページを更新したとき、または曲の再生中にページに移動したときに、残りの長さが得られないことです。曲全体のカウントダウンを取得します。

たとえば、2 分間の曲の場合。午前 9 時 38 分に開始され、午前 9 時 39 分にページに移動した場合、2 分ではなく 1 分のカウントダウンが必要です。

したがって、本当の問題は、サーバー側で曲の残りの長さを追跡するにはどうすればよいかということだと思います。

var startTime, countAmt, interval;
function now() {
  return ((new Date()).getTime());
}
function tick() {
  var elapsed = now() - startTime;
  var cnt = countAmt - elapsed;
  var elem = document.getElementById("countdown");
  if (cnt > 0) {
    elem.innerHTML = minute(Math.round(cnt / 1000));
  } else {
    elem.innerHTML = "0:00";
    clearInterval(interval);
  }
}
function startTimer(secs) {
  document.getElementById("countdown").innerHTML = minute(secs);
  countAmt = secs * 1000;
  startTime = now();
  interval = setInterval(tick, 1000);  
}
function minute(secs){
    minVar = Math.floor(secs/60);  // The minutes
    secs = secs % 60;              // The balance of seconds
    if (secs < 10) {
        secs = "0"+secs;
    }
    return minVar+":"+secs;
}
startTimer(<?php echo $stream['info']['length'];?>);
document.getElementById("countdown").innerHTML = minute(<?php echo $stream['info']['length'];?>);
4

1 に答える 1

0

Winamp の高度なタイトル形式を使用すると、曲の開始時刻を次の形式で送信できますh:m:s

合計秒数を取得しています:

sscanf($song_begins, "%d:%d:%d", $hours, $minutes, $seconds);
$song_begins_sec = $hours * 3600 + $minutes * 60 + $seconds;

現在の時刻を取得します。

$now = date('H:i:s', time());

すぐに:

sscanf($now, "%d:%d:%d", $hours, $minutes, $seconds);
$now_sec = $hours * 3600 + $minutes * 60 + $seconds;

次に、曲が終わったときに計算します。

$songend = $song_begins_sec+$stream['info']['length'];

したがって、正しい $countdown は次のとおりです。

$countdown = $songend-$now_sec;
于 2013-03-23T19:45:31.727 に答える