在HTML中,如何使用播放视频的iFrame激活关闭按钮?

时间:2018-08-24 14:35:37

标签: html video iframe close-button

在上一个问题中,我问到如何在iFrame中播放视频,并得到了答案:How to click from a video link and let it play in an area below?

但是现在我面临另一个问题,我有一个iFrame和一个关闭[x]按钮[灵感来自:http://jsfiddle.net/EFbzY/1/],但是我不知道如何激活该关闭按钮来关闭iFrame,网站结尾处的html和脚本代码如下所示,用于控制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 id="fade" class="black_overlay" onclick="closeLightBox()" style="display: block;">
    <div style=" z-index: 0; left: 76%; top: 17%; width: 22px; position: absolute;">
      <h2>&times;</h2>
    </div>
  </div>
</div>

<script>
  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');
  });
</script>

[页面顶部]的样式代码如下:

#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;
        }

测试站点位于:http://gatecybertech.com/test

在网站的右上角,单击“视频”链接将带您到该部分,单击视频后,将打开iFrame并使用右上角的[x]按钮播放视频,但尚未激活,如何修复它以关闭iFrame和视频?

1 个答案:

答案 0 :(得分:1)

好的,经过一些研究和实验,我终于明白了。它的运行位置:http://gatecybertech.com/test之后将移至主站点:http://gatecybertech.com

[1]样式如下:

#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;
                  color: #fff;
                  text-align: center;
                  font-size: 26px;
            max-width: 100%;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        #modal .close {
            position: absolute;
            top: 0;
            right: 0;
            width: 58px;
            height: 58px;
            line-height: 35px;
            text-align: center;
            border: 0;
            font-weight: bold;
            font-size: 26px;
            color: #fff;
            background: #366;
            cursor: pointer;
            transition: background .2s;
        }
        #modal .close:hover, #modal .close:active {
            background: #ef3658;

        }
        #modal.is-visible {
            display: flex;
        }

[2] HTML看起来像这样:

            <div class="tools-icon">
              <a href=https://www.youtube.com/embed/IgBIaZgoAQc?autoplay=1 target=_blank data-target="modal" data-video-title="Keypad Pins Easily Stolen"><img src=https://i.ytimg.com/vi/IgBIaZgoAQc/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDW3KcjXsTR5utmlvhFfibLe-bvRg width=170 height=110></a>
              <p class="tools-icon__text">Keypad Pins Easily Stolen</p>
            </div>

...

  <!-- 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">
      <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 class="black_overlay" onclick="closeLightBox()" style="display: block;">
        <div style=" z-index: 0; left: 76%; top: 17%; width: 22px; position: absolute;">
          <a class="close" onclick = "return close_iFrame();"><h2>&times;</h2></a>
        </div>
      </div>
    </div>

[3]脚本如下:

<script>
  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');
    }
  });
</script>

<script language="javascript" type="text/javascript">
  function close_iFrame()
  {
    var modal = document.getElementById('modal'), 
                ytVideo = modal.querySelector('.content .yt-video'); 
                ytVideo.src = '';
                modal.classList.toggle('is-visible');
  }
</script>