【问题标题】:HTML5 video repeat at a given timeframeHTML5 视频在给定时间范围内重复
【发布时间】:2017-05-24 21:34:14
【问题描述】:

我尝试创建一个与 HTML5 视频元素关联的 repeat 函数,因此它允许播放器在我想要的给定时间范围内重复播放。

我将按以下顺序调用此函数,repeat(1,3), repeat(5,7),所以我希望播放器在调用 repeat(1,3) 时按时重复 1 秒 - 3 秒,然后在调用 repeat(5,7) 时重复 5 秒 - 7 秒。

然而,当调用repeat(5,7) 时,播放器会不断重复时间 1-3 秒帧。我知道问题是video.currentTime >= 3repeat(5,7) 中为真,并且玩家再次进入时间 1 秒。但我不确定该怎么做。调用repeat(5,7) 时我应该删除eventListener 吗?处理这个问题的正确方法是什么?

repeat(startTime, endTime) {
  var video = document.getElementsByTagName('video')[0];
  video.addEventListener('timeupdate', function() {
    if (elem.currentTime >= endTime) {
      elem.currentTime = startTime;
      elem.play();
    }
  }, false);
}

【问题讨论】:

    标签: html video html5-video


    【解决方案1】:

    您需要将循环代码包装在一个命名函数中,以便在设置新循环之前删除旧循环。那是在funcLoop下面

    我还添加了一项检查,以便如果您在旧循环中并触发新循环,则它会移动到开头(不确定您是否需要,但似乎使它更完整)

    <video id="video" controls="controls" muted preload="metadata" >
        <source src="video.mp4" type="video/mp4" />
    </video>
    <button onclick="repeat(1,3)">1-3</button>
    <button onclick="repeat(5,7)">5-7</button>
    
    <script>
    var funcLoop
    function repeat(startTime, endTime) {
        var video = document.getElementById('video');
        video.removeEventListener('timeupdate', funcLoop, false);
        video.addEventListener('timeupdate', funcLoop=function(){
            if (video.currentTime < startTime) {
                video.currentTime = startTime;
            }
            if (video.currentTime >= endTime) {
                video.currentTime = startTime;
            }}, false);
        video.play();
    }
    </script> 
    

    【讨论】:

    • 谢谢!在比较了我的和你的代码之后,我意识到我几乎到达了目的地。我的代码在repeat 函数的开头定义了removeEventListener,但事实证明我的问题是repeat 函数中定义了funcLoop`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2017-01-19
    • 1970-01-01
    • 2016-12-16
    • 2019-04-29
    相关资源
    最近更新 更多