JS - Youtube iframe API返回错误的当前时间和持续时间?

时间:2016-12-23 01:00:14

标签: javascript api iframe youtube

我有一些代码用于获取当前时间和持续时间,但两次都显示错误,持续时间比常规视频长,当前时间似乎太快,也从未达到总持续时间金额并稍稍停止。

代码:

<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>

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

查看/ 60.0000我想你想知道已经过了多少分钟。实施的问题是toFixed每次都会四舍五入,因为getCurrentTime()会返回一个值小部分更多的是5大部分时间它像x.9xxxx一样来修复try Math.floor()并分别计算分和秒

您可以使用以下内容显示min:sec

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

你应该注意,十进制表示法中的100秒将是1.40(1分40秒),但在实际的十进制表示中它将是 1.66因为在真正的十二月。表示59不会在+1时赢得1.00但仅在99之后。如果你需要实际的dec。表示更改此部分

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

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

在早期的代码段