代码之家  ›  专栏  ›  技术社区  ›  Frank

如何从视频链接中单击并让它在下面的区域播放?

  •  0
  • Frank  · 技术社区  · 7 年前

    <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>

    如何在列表下创建查看区域,以便单击视频链接时,它将在查看区域中播放?

    1 回复  |  直到 7 年前
        1
  •  1
  •   ThS    7 年前

    正如我在评论中建议的,我创建了一个 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">&times;</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上的部分。下面是一些图片来说明:

    FIrst Step Second Step Third Step

    为什么使用 嵌入 watch 链接?

    以防止跨域策略限制。简单地说,默认情况下,服务器不允许其他服务器/站点异步获取其文件。

    关于模态的注记 分区

    • 为了简单起见,我没有做任何作为打开/关闭效果的动画,并且模式没有响应。
    • 你可以按 ESC (退出)关闭模式的按钮。
    • 模态的标记 分区 必须按计划工作。

    data-href 而不是 href公司 ?

    href公司 在连接到garantee的链接上,即使 JavaScript

    希望我的回答能把你推得更远。我来这里是想得到进一步的解释。