Javascript 使用setTimeout在循环中播放视频
我想循环播放视频。由于某些原因,我不想在结束事件时更改视频src。 所以我为循环中的每个视频创建了视频元素。我还有视频src和数组中的持续时间 以下是我的想法: 只能看到当前播放的视频标签。其他人将被隐藏。 我想使用setTimeout函数,而不是使用ended事件。视频的持续时间将是延迟参数 但他们都在一起玩。我不能让他们按顺序玩 以下是我迄今为止所做的工作:Javascript 使用setTimeout在循环中播放视频,javascript,html,html5-video,settimeout,Javascript,Html,Html5 Video,Settimeout,我想循环播放视频。由于某些原因,我不想在结束事件时更改视频src。 所以我为循环中的每个视频创建了视频元素。我还有视频src和数组中的持续时间 以下是我的想法: 只能看到当前播放的视频标签。其他人将被隐藏。 我想使用setTimeout函数,而不是使用ended事件。视频的持续时间将是延迟参数 但他们都在一起玩。我不能让他们按顺序玩 以下是我迄今为止所做的工作: videoArray = [ {"video":video1.mp4, "duration": 5}, {"video
videoArray = [
{"video":video1.mp4, "duration": 5},
{"video":video2.mp4, "duration": 7},
{"video":video3.mp4, "duration": 9},
{"video":video4.mp4, "duration": 10},
]
for (var j = 0; j < videoArray.length; j++){
var video = document.createElement("video");
video.src=videoArray[j];
video.id="video-"+j;
video.preload = "metadata";
video.type="video/mp4";
video.autoplay = true;
video.style.display="none";
document.body.appendChild(video);
}
for (var count = 0; count < videoArray.length; count++) {
(function(num){
setTimeout(function() {
videoArray[num].video.style.display="block";
videoArray[num].video.play();
}, 1000 * videoArray[num].duration);
videoArray[num].video.style.display="none";
})(count);
}
videoArray=[
{“视频”:video1.mp4,“持续时间”:5},
{“视频”:video2.mp4,“持续时间”:7},
{“视频”:video3.mp4,“持续时间”:9},
{“视频”:video4.mp4,“持续时间”:10},
]
对于(var j=0;j
您可以将视频的持续时间保存在一个变量中,然后将此变量与以前的视频持续时间累加,并将其设置为setTimeOut duration
请注意,视频的时间以秒为单位。对于第一个要播放的视频,用户必须进行交互,否则视频将无法播放
工作示例:
功能启动视频(事件){
event.target.style.display=“无”;
(功能(){
视频阵列=[
{
视频:
"http://techslides.com/demos/sample-videos/small.mp4",
持续时间:5
},
{
视频:
"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",
持续时间:60
},
{
视频:
"https://mobamotion.mobatek.net/samples/sample-mp4-video.mp4",
持续时间:120
},
{
视频:
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
持续时间:600
}
];
设vidararayelem=[];
对于(var j=0;j
视频{
高度:100px;
宽度:100px;
显示:内联块;
保证金:4倍;
浮动:左;
}
开始视频演示
除了您试图实现一些奇怪的东西,而且您的代码示例无法编译之外。在我看来,你做到了。
唯一缺少的是pause()
和display=“none”
。通过最少的编辑,您就拥有了所需的内容
const videoArray=[
{“video”:“video1.mp4”,“duration”:5},//当然你需要”
{“video”:“video2.mp4”,“duration”:7},
{“video”:“video3.mp4”,“duration”:9},
{“video”:“video4.mp4”,“duration”:10},
]
for(设j=0;j
但是有很多缺陷:
setTimeout
不关心网络延迟和其他与时间相关的问题,因此您的视频序列很可能无法无缝播放持续时间
值是否准确,您应该使用pause()
播放/暂停
并不是那么简单