Twitter Bootstrap Modal stop Youtube video

后端 未结 21 1568
小蘑菇
小蘑菇 2020-11-27 11:57

I\'m very new to javascript and trying to use Twitter bootstrap to get a good looking website up and running quickly. I know this has something to do with jquery, but I\'m

相关标签:
21条回答
  • 2020-11-27 12:18

    My solution for 2 or more Youtube videos using the HTML data-* attribute. The video autoplays and stops when the modal is opened and closed.

    <button data-url="https://www.youtube.com/embed/C0DPdy98e4c" data-toggle="modal" data-target="#mymodal">Video 1</button>
    <button data-url="https://www.youtube.com/embed/ScMzIvxBSi4" data-toggle="modal" data-target="#mymodal">Video 2</button>
    
    <!-- Modal -->
    <div id="mymodal" class="modal fade">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-body">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal" aria-hidden="true">Close</button>
            </div>
            <div class="embed-responsive embed-responsive-16by9">
              <iframe class="embed-responsive-item" src="" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
            </div>
          </div>
        </div>
      </div>
    </div>
    
    $('.modal').on('show.bs.modal', function (event) {
      $(this).find('iframe').attr("src", $(event.relatedTarget).data('url') );
    });
    
    $('.modal').on('hidden.bs.modal', function (e) {
        $(this).find('iframe').attr("src", "");
    });
    

    Here is a Codepen demo: https://codepen.io/danielblazquez/pen/oOxRJq

    0 讨论(0)
  • 2020-11-27 12:18

    For angular or for dynamic html or if we have multiple iframes then use as below

    $("#myModal").on('hidden.bs.modal', function (e) {
      $("#myModal iframe").each(function(){
        $(this).attr("src", $(this).attr("src"));
      });
    });
    
    0 讨论(0)
  • 2020-11-27 12:19

    if you have multiple modals with many videos, let's say you have a modal on each slide on a carousel for instance, you need something more dynamic to close/stop the video in the visible slide and not mess up all the other modals, use this:

    $(".modal").on('hidden.bs.modal', function (e) {
          $(this).find("iframe").attr("src", $(this).find("iframe").attr("src"));
      });
    
    0 讨论(0)
  • 2020-11-27 12:20

    If someone still has the problem, try this, it worked for me:

    $(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);
    
            });
        });
    });
    
    0 讨论(0)
  • 2020-11-27 12:20

    This one does it perfectly:

    $("#myModal").on("hidden.bs.modal", function(t) {
       var o = $(t.target).find("iframe");
       o.each(function(t, o) {
          $(o).attr("src", $(o).attr("src"))
       });
    });
    

    If you however want to have it start when modal opens / stop when it closes use this code:

    But make sure to add enablejsapi=1 in your src, like this for example:

    <iframe src="https://www.youtube.com/embed/YOUR_VIDEO_CODE?rel=0&amp;controls=0&amp;showinfo=0&enablejsapi=1" frameborder="0" allowfullscreen></iframe>
    
    
    function playStopVideo() {
        var youtubeFunc ='';
        var outerDiv = $("#myModal");
        var youtubeIframe = outerDiv.find("iframe")[0].contentWindow;
        outerDiv.on('hidden.bs.modal', function (e) {
            youtubeFunc = 'stopVideo';
            youtubeIframe.postMessage('{"event":"command","func":"' + youtubeFunc + '","args":""}', '*');
        });
        outerDiv.on('shown.bs.modal', function (e) {
            youtubeFunc = 'playVideo';
            youtubeIframe.postMessage('{"event":"command","func":"' + youtubeFunc + '","args":""}', '*');
        });
    }
    
    playStopVideo();
    
    0 讨论(0)
  • 2020-11-27 12:22

    Here is my solution, it solves the following using bootstrap event calls:

    1. Autoplay movie when showing the modal
    2. Stop movie when modal is hidden

    HTML carousel inside modal, first active item is the iframe video

    <button class="btn btn-primary" data-toggle="modal" data-target="#myModal">Modal</button>
    
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-body">
                    <div id="myCarousel" class="carousel slide carousel-fade" data-ride="carousel">
                        <div class="carousel-inner" role="listbox">
                            <div class="item active">
                                <div class="fill">
                                    <iframe id="videoIframe" width="100%" height="100%" src="https://www.youtube.com/embed/UVAjm8b7YFg?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    

    Javascript autoplay when displaying modal, then reset the URL and apply it to iframe src again

    $('#myModal').on('show.bs.modal', function() {
        $("#videoIframe")[0].src += "&autoplay=1";
    });
    $('#myModal').on('hidden.bs.modal', function(e) {
        var rawVideoURL = $("#videoIframe")[0].src;
        rawVideoURL = rawVideoURL.replace("&autoplay=1", "");
        $("#videoIframe")[0].src = rawVideoURL;
    });
    
    0 讨论(0)
提交回复
热议问题