我在页面上有一些 youtube 视频,并使用 CSS 显示所选视频并循环到其他视频,基本上使用隐藏和 block 元素来隐藏和显示每个视频。我试图避免使用 jQuery,因为我没有找到合适的源代码,也没有编辑现有源代码以满足我的需要的经验。问题是因为我正在隐藏和显示视频,如果我播放一个视频并移动到下一个 - 原始视频仍在播放,因此您会出现音频交叉,并且许多视频会降低 PC 的速度。 Youtube 视频可以用“k”键暂停,所以我在链接中添加了一个“accesskey”功能来暂停它。但是我猜浏览器在 accesskey 被激活之前隐藏了它,因此视频继续在后台播放,因为 accesskey 只适用于事件视频播放。解决我的问题的任何建议或意见。
网站(实例): http://s187242710.onlinehome.us/tdsa/resources.php
HTML:
<script>
function show(id) {
var item = document.getElementById(id);
var all = document.getElementsByClassName('hidden');
for(var i=0; i<all.length; i++)all[i].style.display = 'none';
if(item)item.style.display = 'block';
}
</script>
<h1>Practice Techniques</h1>
<div class="resourcecontainer">
<a href="javascript:show('test2');">
<img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<div class="resourcecontainer">
<a href="javascript:show('test3');">
<img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<div class="resourcecontainer">
<a href="javascript:show('test4');">
<img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<div class="resourcecontainer">
<a href="javascript:show('test5');">
<img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<br><br>
<h1>Equipment Selection</h1>
<div class="resourcecontainer"><img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0"></div>
<div class="resourcecontainer"><img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0"></div>
<div class="resourcecontainer"><img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0"></div>
<div class="resourcecontainer"><img class="resourceimage" src="images/sampleresource.jpg" width="190" height="120" border="0"></div>
<br><br>
<div id="test1" class="hidden">
</div>
<div id="test2" class="hidden">
<div class="resourcevideo">
<div class="videolink"><a href="javascript:show('test1');">(Previous)</a></div>
<div class="videolink"><a href="javascript:show('test1');" accesskey="k">[Close]</a></div>
<div class="videolink"><a href="javascript:show('test3');">(Next)</a></div>
<iframe class="centervideo" width="550" height="350" src="https://www.youtube.com/embed/EO4-B_ttHe0" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div id="test3" class="hidden">
<div class="resourcevideo">
<div class="videolink"><a href="javascript:show('test2');">(Previous)</a></div>
<div class="videolink"><a href="javascript:show('test1');" accesskey="k">[Close]</a></div>
<div class="videolink"><a href="javascript:show('test4');">(Next)</a></div>
<iframe class="centervideo" width="550" height="350" src="https://www.youtube.com/embed/XiGt0X0csoE" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div id="test4" class="hidden">
<div class="resourcevideo">
<div class="videolink"><a href="javascript:show('test3');">(Previous)</a></div>
<div class="videolink"><a href="javascript:show('test1');">[Close]</a></div>
<div class="videolink"><a href="javascript:show('test5');">(Next)</a></div>
<iframe class="centervideo" width="550" height="350" src="https://www.youtube.com/embed/XnbPGKB34bU" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div id="test5" class="hidden">
<div class="resourcevideo">
<div class="videolink"><a href="javascript:show('test4');">(Previous)</a></div>
<div class="videolink"><a href="javascript:show('test1');">[Close]</a></div>
<div class="videolink"><a href="javascript:show('test2');">(Next)</a></div>
<iframe class="centervideo" width="550" height="350" src="https://www.youtube.com/embed/qiZOkhJ_wnY" frameborder="0" allowfullscreen></iframe>
</div>
</div>
CSS:
.resourcecontainer {
width:210px;
height:140px;
float:left;
background-color:#EDEDED;
margin-right: 20px;
text-align:center;
margin-bottom:25px;
border-radius: 10px;
}
.resourceimage {
border:solid 1px;
border-color:#A5A5A5;
margin-top: 10px;
}
.resourcevideo {
clear: both;
width: 600px;
height: 450px;
color:#FFFFFF;
background-color: #000000;
z-index: 9999;
position:absolute;
top: 50%;
left: 50%;
margin-left: -300px;
margin-top: -210px;
}
.centervideo {
margin: 25px;
}
.videolink {
color: #FFFFFF;
padding: 0px;
margin: 0px;
font-size:24px;
font-weight:bold;
background-color:#AA3537;
width: 200px;
height: 50px;
float: left;
text-align:center;
line-height: 50px;
display: block;
}
.videolink a {
text-decoration:none;
color:#FFFFFF;
}
.videolink a:hover {
color:#000000;
}
.hidden {
display:none;
}
#test1 {
display: block;
}
最佳答案
您需要使用 Youtube Player API及其功能,而不是显示和隐藏视频,而是在单个 div 元素中一次动态加载一个 youtube 视频。这样您的下一个/上一个视频只会在当前视频停止播放后开始播放。
你的 show() 函数应该是这样的-
function show(id,current_video,next_video,previous_video) {
var item = document.getElementById(id);
var all = document.getElementsByClassName('hidden');
for(var i=0; i<all.length; i++)all[i].style.display = 'none';
if(item)item.style.display = 'block';
$("#prev").attr('href','javascript:show("test2","'+next_video+'","'+previous_video+'","'+current_video+'")');
$("#next").attr('href','javascript:show("test2","'+previous_video+'","'+current_video+'","'+next_video+'")');
$("#player").attr('src',"https://www.youtube.com/embed/"+current_video+'?enablejsapi=1&origin=http://localhost');
$("#player")[0].src += "&autoplay=0";
}
此显示功能现在将动态更改您的下一个/上一个和当前视频。
Youtube Player API 应该这样使用
// 2. This code loads the IFrame Player API code asynchronously.
//document.getElementById("video").hide();
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
//setInterval(checkTime,1000);
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '350',
width: '550',
videoId: 'EO4-B_ttHe0',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
//setInterval(checkTime,1000);
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
//event.target.playVideo();
}
// 5. The API calls this function when the player's state changes.
// The function indicates that when playing a video (state=1),
// the player should play for six seconds and then stop.
var done = false;
function onPlayerStateChange(event) {
/*if (event.data == YT.PlayerState.CUED) {
player.seekTo(0);
stopVideo();
}*/
if (event.data == YT.PlayerState.ENDED) {
done = true;
}
}
function stopVideo() {
player.stopVideo();
}
你的 HTML 应该是这样的
<h1>Practice Techniques</h1>
<div class="resourcecontainer">
<a href="javascript:show('test2','EO4-B_ttHe0','XiGt0X0csoE','qiZOkhJ_wnY');">
<img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<div class="resourcecontainer">
<a href="javascript:show('test2','XiGt0X0csoE','XnbPGKB34bU','EO4-B_ttHe0');">
<img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<div class="resourcecontainer">
<a href="javascript:show('test2','XnbPGKB34bU','qiZOkhJ_wnY','XiGt0X0csoE');">
<img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<div class="resourcecontainer">
<a href="javascript:show('test2','qiZOkhJ_wnY','EO4-B_ttHe0','XnbPGKB34bU');">
<img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0">
</a>
</div>
<br><br>
<h1>Equipment Selection</h1>
<div class="resourcecontainer"><img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0"></div>
<div class="resourcecontainer"><img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0"></div>
<div class="resourcecontainer"><img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0"></div>
<div class="resourcecontainer"><img class="resourceimage" src="http://s187242710.onlinehome.us/tdsa/images/sampleresource.jpg" width="190" height="120" border="0"></div>
<br><br>
<div id="test1" class="hidden">
</div>
<div id="test2" class="hidden">
<div class="resourcevideo">
<div class="videolink"><a id="prev" href="javascript:show('test1');">(Previous)</a></div>
<div class="videolink"><a id="current" href="javascript:show('test1');" accesskey="k">[Close]</a></div>
<div class="videolink"><a id="next" href="javascript:show('test3');">(Next)</a></div>
<div id="player"></div>
</div>
</div>
关于javascript - 停止YouTube视频的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512786/