正如我在评论中建议的,我创建了一个
div
,最初隐藏,起到弹出模式的作用,当
a
data-target="modal"
被点击。我对你的
HTML
我将在答案中包含它们的代码。
过程:
当你点击一个链接时
data target=“模态”
(具有
href
视频的属性,这里我添加了
data target=“模态”
为了区分这些链接和页面中可能出现的其他链接
分区
是我给的
id="modal"
将播放并填充适当的视频。所以,每次点击一个链接
属性将放在
src
的属性
iframe
最终结果:
Ps:我将提供一个可运行的代码片段,但是,由于堆栈溢出的一些限制,它可能无法按预期工作。为此,我做了一个
DEMO
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>
必须在
代码:
-
每个
一
href公司
要在模式中显示视频的属性必须具有
data-target
属性等于“modal”。
-
当
分区
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公司
的属性
标签)
必须
做一个
embed
https://www.youtube.com/embed/A1nRiiWYgZw
例如)。所以,你必须使用
src公司
的
框架
嵌入
剖面图
share
YouTube上的部分。下面是一些图片来说明:
为什么使用
嵌入
watch
链接?
以防止跨域策略限制。简单地说,默认情况下,服务器不允许其他服务器/站点异步获取其文件。
关于模态的注记
分区
-
为了简单起见,我没有做任何作为打开/关闭效果的动画,并且模式没有响应。
-
你可以按
ESC
(退出)关闭模式的按钮。
-
-
模态的标记
分区
必须按计划工作。
data-href
而不是
href公司
?
href公司
在连接到garantee的链接上,即使
JavaScript
希望我的回答能把你推得更远。我来这里是想得到进一步的解释。