// 获取视频容器及视频链接数组 const container = document.getElementById('videoContainer'); const videoLinks = this.videoData; // 设置视频播放器属性及监听视频加载完成事件 const videoPlayer = document.createElement('video'); videoPlayer.setAttribute('controls', 'true'); videoPlayer.addEventListener('loadedmetadata', function() { container.style.display = 'block'; videoPlayer.play(); }); // 播放视频 let currentVideoIndex = 0; const playNextVideo = async () => { if(currentVideoIndex >= videoLinks.length) { // 所有视频播放完毕,停止播放 videoPlayer.pause(); currentVideoIndex = 0; this.videoLinks = []; // 清空视频链接 return; } const sourceTag = document.createElement('source'); sourceTag.setAttribute('src', videoLinks[currentVideoIndex]); videoPlayer.innerHTML = ''; videoPlayer.appendChild(sourceTag); // 监听视频播放完毕事件,播放下一个视频 await new Promise((resolve) => { videoPlayer.addEventListener('ended', resolve); }); // 播放下一个视频 currentVideoIndex++; await playNextVideo(); }; // 开始播放第一个视频 await playNextVideo(); // 绑定关闭按钮点击事件 const closeButton = document.getElementById('closeButton'); videoPlayer.addEventListener('ended', function() { closeButton.addEventListener('click', function() { videoPlayer.pause(); videoPlayer.removeAttribute('src'); videoPlayer.load(); container.style.display = 'none'; }); }); // 将视频播放器渲染到容器中 container.appendChild(videoPlayer);
时间: 2024-04-23 19:27:02 浏览: 87
这段代码是用来实现一个视频播放器的,其中包括以下几个步骤:
1. 获取视频容器和视频链接数组。
2. 创建一个 video 元素,设置其属性和监听视频加载完成事件。
3. 定义一个 playNextVideo 函数来播放下一个视频。
4. 播放第一个视频,然后绑定关闭按钮的点击事件。
5. 将视频播放器渲染到容器中。
在播放下一个视频时,会检查当前视频是否为最后一个视频,如果是则停止播放并清空视频链接数组。否则,会创建一个 source 元素来设置视频链接,然后播放该视频并等待其播放完毕事件,以便播放下一个视频。最后,将关闭按钮的点击事件绑定到 video 元素的 ended 事件上,以便在视频播放完毕后关闭视频播放器。
相关问题
// 获取视频容器及视频链接数组 const container = document.getElementById('videoContainer'); const videoLinks = this.videoData; // 创建视频播放器 const videoPlayer = document.createElement('video'); videoPlayer.setAttribute('controls', 'true'); container.appendChild(videoPlayer); // 播放视频 let currentVideoIndex = 0; const playNextVideo = () => { if (currentVideoIndex >= videoLinks.length) { // 所有视频播放完毕,停止播放 videoPlayer.pause(); currentVideoIndex = 0; this.videoLinks = []; // 清空视频链接 return; } videoPlayer.setAttribute('src', videoLinks[currentVideoIndex]); videoPlayer.load(); videoPlayer.play(); currentVideoIndex++; }; // 监听视频加载失败事件 videoPlayer.addEventListener('error', () => { console.error('视频加载失败'); playNextVideo(); }); // 开始播放第一个视频 playNextVideo(); // 绑定关闭按钮点击事件 const closeButton = document.getElementById('closeButton'); videoPlayer.addEventListener('ended', () => { closeButton.addEventListener('click', () => { videoPlayer.pause(); videoPlayer.removeAttribute('src'); container.style.display = 'none'; }); }); // 显示视频容器 container.style.display = 'block';
根据你提供的代码,我看不到你可能产生重复视频容器的原因。但是,我可以看到一个问题可能导致你的报错。
在播放器播放完一个视频后,你为关闭按钮添加了一个点击事件监听器。但是,每当播放器播放完一个视频时,你都会添加一个新的点击事件监听器,这可能导致重复的点击事件,从而产生报错。你可以在开始播放第一个视频之前为关闭按钮添加一个点击事件监听器,而不是在每个视频播放结束时添加它。这样,每次点击关闭按钮时都会触发同一个事件处理程序,避免了重复的事件监听器。这应该可以解决你的问题。
阅读全文