2016-12-23 4 views
0

私は現在の時間と継続時間を取得するためにいくつかのコードを持っていますが、両方の時間が間違っているように見えます。期間は通常のビデオよりも長く、現在の時間は速すぎるようです。少し前に止まります。JS - Youtube Iframe APIで返されるCurrentTimeとDurationが間違っていますか?

コード:

これを固定することができますどのように
<script type="text/javascript"> 
    var tag = document.createElement('script'); 
    tag.id = 'iframe-demo'; 
    tag.src = 'https://www.youtube.com/iframe_api'; 
    var firstScriptTag = document.getElementsByTagName('script')[0]; 
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

    var player; 
    function onYouTubeIframeAPIReady(event) { 
     player = new YT.Player('existing-iframe-example', { 
      events: { // Setup the events to use 
       'onReady': onPlayerReady, 
       'onStateChange': onPlayerStateChange 
      } 
     }); 

    function onPlayerReady(event) { 
     event.target.playVideo(); // Auto play the video when ready 
    } 

    var myTimer; 
    function onPlayerStateChange(event){ 
     if(event.data==1) { // playing 
      myTimer = setInterval(function(){ 
       document.getElementById("time").innerHTML = (player.getCurrentTime()/60.0000).toFixed(2); 
       document.getElementById("duration").innerHTML = (player.getDuration()/60.0000).toFixed(2); 
      }, 100); // 100 means repeat in 100 ms 
     } 
     else { // not playing 
      clearInterval(myTimer); 
     } 
    } 

    } 
</script> 

+0

に表現の変更、この部分

document.getElementById("time").innerText = minutes + ' min : '+ seconds+ ' sec'; 

あなたは十進表記または実際の10進数表現を表示したいですか? – Viney

答えて

1

/ 60.0000を見て私は、あなたの実装で【選択の問題を渡されているどのくらいの分を見つけるしたいとはgetCurrentTime()が、よりその5時間のほとんどそのような小数部を持つ値を返すためtoFixedが毎回四捨五入されていることですMath.floor()を試してみて、ここで個別に

を分と秒を計算修正するx.9xxxxあなたは分を表示するために使用することができるものです:秒

myTimer = setInterval(function(){   
       var currentTime = player.getCurrentTime(); 
       var minutes  = Math.floor(currentTime/60) < 10 ? '0' + Math.floor(currentTime/60.000) : Math.floor(currentTime/60.000); 
       var seconds  = Math.floor(currentTime % 60) < 10 ? '0' + Math.floor(currentTime % 60.000) : Math.floor(currentTime % 60.000); 

       document.getElementById("time").innerText = minutes + ' min : '+ seconds+ ' sec'; 
      }, 100); // 100 means repeat in 100 ms 

あなたは10進数で100秒が1.40(1分になることに注意してください40秒)実際の10進表現では 1.66となるでしょう。表現59は+1で1.00までラップされませんが、99の後に限ります。

以前のスニペットで
document.getElementById("time").innerText = minutes + ' min : '+((seconds/60)*100) + ' sec'; 

関連する問題