【问题标题】:Changing iframe src stops parent from hiding更改 iframe src 会阻止父级隐藏
【发布时间】:2016-07-28 17:56:56
【问题描述】:

我有以下 html。

<div id="video-popup-overlay"></div>

<div id="video-popup-container">
    <div id="video-popup-close" class="fade"><i class="fa fa-times"></i></div>
    <div id="video-popup-iframe-container">
        <iframe id="video-popup-iframe" src="" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
    </div>
</div>

基本上,当#video-popup-container 显示时,我会播放视频。我希望能够隐藏这个视频。但通常当元素被隐藏时,视频仍然在后台播放。

这就是为什么我要更改 src。但是当我更改 src 时,元素不会隐藏。但是如果我不更改 src,隐藏命令会起作用。

发生这种情况有什么原因吗?

$("#video-popup-close, #video-popup-overlay").on('click', function(e){
    $("#video-popup-iframe").attr('src', "");
    $("#video-popup-overlay").hide();
    $("#video-popup-container").hide();
});

Here is an example

【问题讨论】:

  • 浏览器控制台说什么?
  • @CBroe 不,如果我注释掉 'src' 更改,如果我有它,它会起作用,它不会。
  • 请展示一个活生生的例子。 minimal reproducible example
  • @CBroe 我在问题底部添加了一个示例

标签: javascript jquery html css iframe


【解决方案1】:

隐藏后是否有可能再次显示?由于您将 iframe 中的 src 参数设置为空白,我假设可能不是?

如果是这样,我建议尝试使用.remove() 函数而不是隐藏。即:

$("#video-popup-close, #video-popup-overlay").on('click', function(e){
     $("#video-popup-overlay, #video-popup-container").remove(); 
});

更新:

根据小提琴提供的情况,您似乎调用了错误的 ID 来关闭。在此处查看小提琴:https://jsfiddle.net/g139c9b0/2/

$("#video-popup-close, #video-popup-overlay").on('click', function(e){
    $("#video-popup-overlay, #video-popup-iframe-container, #video-popup-close").hide();
    $("#video-popup-iframe").attr('src', '');
});

更多更新: 抱歉,我认为这足以推断。是的,您必须添加 show() 函数,因为您隐藏了元素。这是完整的小提琴,按照我的预期工作:https://jsfiddle.net/g139c9b0/3/

关于为什么你会看到奇怪的行为,我最好的猜测是 iframe 本身没有被视为当前 DOM 的一部分,因此隐藏它的容器不一定会级联到 iframe 窗口。通常,您不能使用 javascript 与 iframe 进行交互(没有一些变通方法)。它确实感觉有点像浏览器错误,但出于安全原因,它可能会这样工作。

【讨论】:

  • 需要再次更改src。
  • 看了一下更新,如果再次点击点击这里就不行了。如果#video-popup-iframe-container 在已经隐藏的元素中,我不确定为什么需要隐藏它。
  • 看看新的小提琴 - 我认为完整的例子更接近你的期望?
【解决方案2】:

你在播放什么类型的视频? 是本地托管的文件、YouTube 视频还是 Vimeo?我问是因为如果是 YouTube,也许你可以使用 jQuery 来停止视频。

话虽如此,我已经测试了您的代码,它似乎可以正常工作。您是否在浏览器控制台上遇到任何错误?

   

 $(".clickme").on('click', function(e){ 
		e.preventDefault();
		$("#video-popup-iframe").attr('src', "//player.vimeo.com/video/"+$(this).attr('id'));
		$("#video-popup-overlay, #video-popup-container").show(); 
    });

$("#video-popup-close, #video-popup-overlay").on('click', function(e){
	
		$("#video-popup-overlay, #video-popup-container").hide();
    	$("#video-popup-iframe").attr('src', '');
	});
#video-popup-overlay {
  display: none;
  position: fixed;
  z-index: 995;
  top: 0;
  background-color: #000;
  opacity: 0.8;
  width: 100%;
  height: 100%;
}

#video-popup-container {
  display: none;
  position: fixed;
  z-index: 996;
  width: 60%;
  left: 50%;
  margin-left: -30%;
  top: 20%;
  background-color: #fff;
}

#video-popup-close {
  cursor: pointer;
  position: absolute;
  right: -10px;
  top: -10px;
  z-index: 998;
  width: 25px;
  height: 25px;
  border-radius: 25px;
  text-align: center;
  font-size: 12px;
  background-color: #000;
  line-height: 25px;
  color: #fff;
}

#video-popup-close:hover {
  color: #DE0023;
}

#video-popup-iframe-container {
  position: absolute;
  z-index: 997;
  width: 100%;
  padding-bottom: 56.25%;
  border: 2px solid #000;
  background-color: #000;
  border-radius: 2px;
}

#video-popup-iframe {
  z-index: 999;
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="clickme" id="161171581">
Click me
</div>

<div id="video-popup-container">
  <div id="video-popup-close" class="fade">x</div>
  <div id="video-popup-iframe-container">
    <iframe id="video-popup-iframe" src="" width="100%" height="100%" frameborder="0"></iframe>
  </div>
</div>

另一种可能的解决方案: Stop embedded youtube iframe?

编辑:看看更新的代码,这是预期的行为吗? EDIT2:https://jsfiddle.net/588chuyb/

【讨论】:

  • 我正在使用 vimeo。控制台中也没有错误。请看my example,好像不行。
  • 嘿,布莱恩,你应该看看上面的小提琴。我认为它按预期工作。该问题可能与 .on('load', function(){
  • 谢谢阿方索!这似乎是个问题。我有加载功能,因此在加载 iframe 之前它不会显示该框,但我可以看到它在这里不起作用。感谢您的帮助。
  • 不客气!我确信你想要的可以实现,如果我以后有空我会试试看:)
【解决方案3】:

在更改src 之前尝试隐藏。并查看控制台,看看是否有一些消息,它应该会有所帮助。

$(document).on('click', '#video-popup-close, #video-popup-overlay', function(e){
    $("#video-popup-overlay, #video-popup-container").hide();
    $("#video-popup-iframe").attr("src", "");
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2021-12-04
    • 2010-11-02
    相关资源
    最近更新 更多