我的网站上有几个视频,它们的列出如下:
<ul id="toolsButtons" class="ahrefs__tools__nav">
<li>
<div class="tools-icon">
<a href=https://www.youtube.com/watch?v=A1nRiiWYgZw target=_blank><img src=Traditional_vs_GATE_s.PNG></a>
<use xlink:href="#keyword-research-icon"></use>
<p class="tools-icon__text">Traditional vs GATE</p>
</li>
<li>
<div class="tools-icon">
<a href=https://www.youtube.com/watch?v=wLHfGQlLqtE target=_blank><img src=Guess_GATE_Password.PNG></a>
<use xlink:href="#competitive-analysis-icon"></use>
<p class="tools-icon__text">GATE Passcode</p>
</div>
</li>
<li>
<div class="tools-icon">
<a href=https://www.youtube.com/watch?v=5tAGemIvUeI target=_blank><img src=GATE_Demo.PNG></a>
<use xlink:href="#keyword-research-icon"></use>
<p class="tools-icon__text">How GATE Works</p>
</div>
</li>
</ul>
如何在列表下方创建观看区域,以便单击视频链接后,该视频区域就会在观看区域中播放?
答案 0 :(得分:1)
正如我在评论中所建议的,我创建了一个div
,最初是隐藏的,它扮演着弹出模式的角色,当具有a
的{{1}}标记时将显示该弹出窗口被点击。我对您的data-target="modal"
代码进行了一些更改,将在答案中进行介绍。
过程:
当您单击具有HTML
的链接(具有视频的data-target="modal"
属性的链接时,在这里,我为每个链接添加了href
只是为了区分这些链接与将显示页面中可能存在的其他链接)我给它提供的模式data-target="modal"
div
并用适当的视频填充。因此,每次单击链接时,其id="modal"
属性将放置在将托管视频的href
标签的src
属性中。
最终结果:
Ps:我将提供一个可运行的代码段,但是由于Stack Overflow的某些限制,它可能无法正常运行。为此,我在CodePen上进行了工作DEMO,可以根据需要检查并使用该代码。
iframe
var modal = document.getElementById('modal'), closeBtn = modal.querySelector('.close'), ytVideo = modal.querySelector('.content .yt-video'), title = modal.querySelector('.content .title'), anchors = document.querySelectorAll('a[data-target="modal"]'), l = anchors.length;
for (var i = 0; i < l; i++) {
anchors[i].addEventListener("click", function(e) {
e.preventDefault();
title.textContent = this.dataset.videoTitle || 'No title';
ytVideo.src = this.href;
modal.classList.toggle('is-visible');
modal.focus();
});
}
modal.addEventListener("keydown", function(e) {
if (e.keyCode == 27) {
title.textContent = '';
ytVideo.src = '';
this.classList.toggle('is-visible');
}
});
closeBtn.addEventListener("click", function(e) {
e.preventDefault();
title.textContent = '';
ytVideo.src = '';
modal.classList.toggle('is-visible');
});
#modal {
display: none;
position: fixed;
width: 100vw;
height: 100vh;
max-height: 100vh;
top: 0;
left: 0;
background: rgba(24, 24, 24, .6);
z-index: 999;
}
#modal .content {
width: 55%;
height: 65vh;
margin: auto; /* allows horyzontal and vertical alignment as .content is in flex container */
}
#modal .content .yt-video {
display: block;
width: 100%;
height: calc(100% - 45px);
}
#modal .content .title {
box-sizing: border-box;
height: 45px;
line-height: 23px;
padding: 12px 4px;
margin: 0;
background: #007bff;
max-width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#modal .close {
position: absolute;
top: 0;
right: 0;
width: 35px;
height: 35px;
line-height: 35px;
text-align: center;
border: 0;
font-weight: bold;
font-size: 24px;
color: #fff;
background: #666;
cursor: pointer;
transition: background .4s;
}
#modal .close:hover, #modal .close:active {
background: #ef3658;
}
#modal.is-visible {
display: flex;
}
必须在<ul id="toolsButtons" class="ahrefs__tools__nav">
<li>
<div class="tools-icon">
<a href="https://www.youtube.com/embed/A1nRiiWYgZw" target="_blank" data-target="modal" data-video-title="Traditional vs GATE"><img src="Traditional_vs_GATE_s.png"></a>
<use xlink:href="#keyword-research-icon"></use>
<p class="tools-icon__text">Traditional vs GATE</p>
</li>
<li>
<div class="tools-icon">
<a href="https://www.youtube.com/embed/wLHfGQlLqtE" target="_blank" data-target="modal" data-video-title="GATE Passcode"><img src="Guess_GATE_Password.png"></a>
<use xlink:href="#competitive-analysis-icon"></use>
<p class="tools-icon__text">GATE Passcode</p>
</div>
</li>
<li>
<div class="tools-icon">
<a href="https://www.youtube.com/embed/5tAGemIvUeI" target="_blank" data-target="modal" data-video-title="How GATE Works"><img src="GATE_Demo.png"></a>
<use xlink:href="#keyword-research-icon"></use>
<p class="tools-icon__text">How GATE Works</p>
</div>
</li>
</ul>
<!-- the modal div that will open when an anchor link is clicked to show the related video in an iframe. -->
<div id="modal" tabindex="-1">
<button type="button" data-dismiss="modal" class="close" title="close">×</button>
<div class="content">
<h4 class="title"></h4>
<iframe class="yt-video" src="https://www.youtube.com/embed/A1nRiiWYgZw" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</div>
</div>
代码中进行的更改:
HTML
属性的a
标签,必须具有一个等于“ modal”的href
属性。data-target
时在视频上方显示标题,请添加一个div
属性,该属性等于这些data-video-title
标签上的某些文本。如果链接中没有a
,则视频上方的标题将为“无标题”。data-video-title
<a href="https://www.youtube.com/embed/A1nRiiWYgZw" target="_blank" data-target="modal" data-video-title="Traditional vs GATE"><img src="Traditional_vs_GATE_s.png"></a>
标签的href
属性)必须是a
链接(embed
为一个例子)。因此,您必须使用YouTube https://www.youtube.com/embed/A1nRiiWYgZw
下src
下iframe
的{{1}}的{{1}}中的链接。以下是一些图像来证明这一点: 为什么使用embed
代替常规的share
链接?
防止跨域策略限制。简单来说,默认情况下,服务器不允许其他服务器/站点异步获取其文件。
有关模式embed
watch
(退出)按钮关闭模式。div
的标记必须保留才能正常使用。 为什么我不使用ESC
而不是div
?
我坚持在链接上使用data-href
,以保证即使禁用href
仍可以访问该视频,如果这样,它将被重定向到该视频。
希望我的回答使您更进一步。我在这里有任何进一步的解释。