Twitter Bootstrap Modal 停止 Youtube 视频

IT技术 javascript jquery twitter-bootstrap youtube
2021-02-27 05:04:10

我对 javascript 非常陌生,并试图使用 Twitter 引导程序来快速启动并运行一个漂亮的网站。我知道这与 jquery 有关系,但是当我按下关闭按钮或关闭图标时,我不确定如何停止我的视频。

有人可以解释一下如何让我的视频停止播放,因为即使我关闭窗口,我仍然可以在后台听到它。

<!-- Button to trigger modal -->
    <a href="#myModal" role="button" class="btn" data-toggle="modal"><img src="img/play.png"></a>

<!-- Modal -->
  <div id="myModal" class="modal hide fade" tabindex="-1" role=labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal" aria>×</button>
      <h3 id="myModalLabel">I am the header</h3>
    </div>
    <div class="modal-body">
      <p><iframe width="100%" height="315" src="http:com/embed/662KGcqjT5Q" frameborder="0" allowfullscreen></iframe></p>
    </div>
    <div class="modal-footer">
      <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
    </div>
  </div>
6个回答

我知道我晚了 2 年多,但从那以后,一些事情发生了变化,B3 开箱即用的新方法是:

$("#myModal").on('hidden.bs.modal', function (e) {
    $("#myModal iframe").attr("src", $("#myModal iframe").attr("src"));
});

使用 Bootstrap 玩得开心!

谢谢!这是我找到的最简洁的解决方案。
2021-04-20 05:04:10
为我工作谢谢!
2021-04-28 05:04:10
也为我工作。谢谢!
2021-04-29 05:04:10
这应该是公认的答案,IMO。它是最简洁、最通用且最不容易出错的。
2021-05-05 05:04:10
应该是缓存/重用选择器。 $("#myModal").on('hidden.bs.modal', function (e) { var $this = $(this); var $frame = $this.find('iframe'); $frame.attr("src", $frame.attr("src")); });
2021-05-09 05:04:10

有一个很好的正确方法 - 请参阅此帖子的已批准答案中的评论

虽然我自己第一次无法做到这一点,而且很匆忙,所以我做了一个相当可怕的hacky代码来解决这个问题。

此代码段“刷新”了嵌入 iframe 的 src,使其重新加载:

jQuery(".modal-backdrop, #myModal .close, #myModal .btn").live("click", function() {
        jQuery("#myModal iframe").attr("src", jQuery("#myModal iframe").attr("src"));
});
谢谢@rob。我需要更多地研究这个和 javascript 以了解这些功能。我尝试在一些 <script> 标签之间插入你上面提到的代码,但它对我的网站没有任何作用。这一定是我需要了解的命名问题
2021-04-16 05:04:10
抱歉有点懒惰 - 已更改上述标记以匹配您的 HTML;现在应该工作
2021-04-19 05:04:10
此方法适用于 Firefox,但不适用于 Chrome。有什么建议?
2021-04-30 05:04:10
谢谢@rob,这很好用。我不确定在评论中在哪里发布后续内容,但我也想将其应用于关闭按钮。我添加了以下内容并且它起作用了。<script type="text/javascript">jQuery(".modal-backdrop, #myModal .close").live("click", function() { jQuery("#myModal iframe").attr("src", jQuery("#myModal iframe").attr("src")); }); jQuery(".modal-backdrop, #myModal .btn").live("click", function() { jQuery("#myModal iframe").attr("src", jQuery("#myModal iframe").attr ("src")); });</script>
2021-05-03 05:04:10
是的,可以做到,但稍微简洁的方法是使用原始功能同时定位所有三个 - 见上文,我已经编辑为在第一部分中也包含“#myModal .btn”。如果我是你,我也会看看我引用的那篇文章(Ruslanas 在下面指的是)——这是一个更好的方法。
2021-05-12 05:04:10

如果有人仍然有问题,试试这个,它对我有用:

$(document).ready(function(){
    $('.modal').each(function(){
            var src = $(this).find('iframe').attr('src');

        $(this).on('click', function(){

            $(this).find('iframe').attr('src', '');
            $(this).find('iframe').attr('src', src);

        });
    });
});
这应该是公认的答案!!使用这种方法,您不必通过 ID 或任何东西,因为它会通过页面上的所有模式。
2021-05-01 05:04:10
你让我头疼不已,并且是 Stack 上的最佳解决方案!
2021-05-04 05:04:10
惊人的!这个片段让我免于头部撞击桌面创伤,谢谢!
2021-05-14 05:04:10

这是我发现的一种在模式窗口中播放视频的简单方法,然后在关闭时停止播放。

当模态显示时,使用 .html 将带有视频的 iFrame 加载到模态主体中,然后在隐藏时将模态主体替换为空。

$('#myModal').on('show', function () { 
 $('div.modal-body').html('YouTube iFrame goes here');  
});
$('#myModal').on('hide', function () {
 $('div.modal-body').html('');
});

这是一个 jsfiddle 示例:

http://jsfiddle.net/WrrM3/87/

触发事件应该是“show.bs.modal”和“hide.bs.modal”而不是“show”和“hide”
2021-04-26 05:04:10
这对我有用,但我使用了“show.bs.modal”和“hide.bs.modal”而不是“show”和“hide”,就像@bpn 所说的那样。多谢你们。
2021-05-02 05:04:10
顺便说一句,如果有人问,我使用 bootsrap v3.3.2。谢谢。
2021-05-09 05:04:10

在这里,我概括了@guillesalazar 的回答。

这将重置任何引导模式中的任何 iFrame(当模式关闭时):

$(function(){
  $("body").on('hidden.bs.modal', function (e) {
    var $iframes = $(e.target).find("iframe");
    $iframes.each(function(index, iframe){
      $(iframe).attr("src", $(iframe).attr("src"));
    });
  });
});

将此添加到您的布局中,您就完成了。

更新:为具有多个 iFrame 的模态修改了代码。

@Vincent 我已经更新了我的答案,使其更加通用,以便了解您的模态中有多个 iFrame 的情况。
2021-04-15 05:04:10
@Vincent 以前的版本似乎可以工作,但实际发生的是:第一个 iFrame 的src属性将替换src给定模式中的所有 iFrame属性。
2021-04-18 05:04:10
嗯。以前的版本似乎已经做得很好了。也将试用新版本。
2021-04-20 05:04:10
@Vincent 这不适用于具有多个视频的模态。为此,您必须遍历$iframevar 中引用的所有 iFrame 例如:$($iframe).each(function(item){$(item).attr("src", $iframe.attr("src"));})
2021-05-03 05:04:10
将此函数添加到 js 文件并使用 .html 将其包含在 html 中<script src="js/modal_vid.js"></script>我有多个模态,有些有多个视频,这适用于嵌入式视频。非常好。
2021-05-13 05:04:10