【问题标题】:JS - Youtube Iframe API Returns The Wrong CurrentTime and Duration?JS - Youtube Iframe API 返回错误的当前时间和持续时间?
【发布时间】:2016-12-23 01:00:13
【问题描述】:

我编写了一些代码来获取当前时间和持续时间,但是两次似乎都是错误的,持续时间比常规视频长,并且当前时间似乎太快,它也永远不会达到总持续时间量并稍早停止。

代码:

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

如何解决这个问题?

【问题讨论】:

  • 您想显示十进制符号还是实际的十进制表示?

标签: javascript api iframe youtube


【解决方案1】:

查看/ 60.0000 我想你想知道已经过去了多少分钟。你的实现问题是toFixed 每次都四舍五入,因为getCurrentTime() 返回的值的小数部分最多超过 5像 x.9xxxx 一样修复尝试 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 因为在真正的 12 月。表示 59 不会在 +1 时达到 1.00,但只能在 99 之后。如果您需要实际的 dec。表示改变这部分

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

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

早先的sn-p

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 2010-12-31
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2023-03-14
    • 2014-07-02
    相关资源
    最近更新 更多