在 HTML5 视频中设置 currentTime 的问题

问题描述 投票:0回答:4

我的 html 中间有一个视频。正如你一开始看到的,我没有任何来源

<video id="videoPrincipal" src="" width="640" height="360" controls preload></video>

当我单击按钮时,我会触发一个函数,该函数会:

myVid = document.getElementById('videoPrincipal');
myVid.src = 'video.mp4';
myVid.play();
myVid.currentTime ='5';

视频开始正确播放,但我无法设置当前时间(我所做的与我们在http://www.w3schools.com/tags/av_prop_currenttime.asp中看到的相同)

如果我在调用播放函数之前设置 currentTime ,它会给我同样的错误。

控制台中显示的错误如下:“未捕获 InvalidStateError:尝试使用不可用或不再可用的对象。” (在当前时间线中)但是当我搜索这个问题时,我无法与视频关联,只能与画布关联。

提前致谢

javascript html video html5-video
4个回答
31
投票

您不必等待它开始播放,但它必须准备好播放。有 canplay 事件可以做到这一点,所以类似这样的事情应该可以工作:

myVid.play();
myVid.addEventListener('canplay', function() {
    this.currentTime = 5;
});

4
投票

如上所述,当视频不可搜索时,您尝试设置 currentTime。因此,作为替代用例(例如,当用户单击按钮时将时间重置为 0),您可以执行以下操作:

function resetVideo() {
  myVid.pause();
   
  if (myVid.seekable.length > 0) {
    myVid.currentTime = 0;
  }
}

或者,您也可以仅在之前播放过视频的情况下尝试重置。

function resetVideo() {
  myVid.pause();
   
  if (myVid.currentTime !== 0) {
    myVid.currentTime = 0;
  }
}


0
投票
video = document.getElementById('video');
begin_play  = 50;
play_video_first = true; //if you want to run only first time    
video.addEventListener("play", capture, false);

function capture(event) 
{
     if (event.type == "play"){
         if(play_video_first){
             play_video_first = false;
             video.currentTime = begin_play;
          }
     }
}

-3
投票

你必须等到它准备好才能玩,
即不要期望

play
是一个阻塞函数
按如下方式更改您的代码:

myVid.play();
myVid.media.addEventListener('playing', function(){
    myVid.setCurrentTime(5);
});
© www.soinside.com 2019 - 2024. All rights reserved.