Подтвердить что ты не робот

Видео Youtube все еще играет, когда Bootstrap Modal закрывается

Я создаю сайт с бутстрапом, который можно найти здесь - http://www.branchingouteurope.com/digital-spark-testing/

Если вы выберете видеоизображение, вы увидите, что модальное окно откроет видео youtube. Проблема в том, что когда модальное окно закрыто, видео продолжает играть. Я хочу, чтобы это видео остановилось, когда модальное окно закрыто.

Я посмотрел онлайн и прочитал множество решений, однако ни один из них не работает. Вот отметка...

<span class="main_video">
<div data-toggle="modal" data-target="#myModal" style="cursor:pointer">
<img src="img/master/video.fw.png" height="81%" width="60%" alt="Digital Spark Video"/>
</div>
</span>

<div class="modal-dialog">
<div class="modal-content">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  </div>
  <div class="modal-body">
  <iframe width="100%" height="100%" src="//www.youtube.com/embed/sIFYPQjYhv8?rel=0" frameborder="0" allowfullscreen></iframe>
  </div>
</div>

`

4b9b3361

Ответ 1

Тестирование здесь, в FireFox 26.0, работает, как ожидалось. Когда я либо закрываю Modal, либо выхожу за него, а затем снова открываю его - видео возвращается, чтобы начать и остановить.

EDIT 1

Воспроизведенный в Chrome, видео действительно продолжает играть после закрытия Modal.

Попробуйте эти уже ответившие вопросы

Остановить видео с YouTube с помощью jquery?

Twitter Bootstrap Модальная остановка видео Youtube

Лучше всего использовать API YouTube для остановки видео. Ответ, который использует этот метод, доступен в вышеприведенных вопросах.

EDIT 2

Это решение работает.

Во-первых, получите JS из этого сообщения: API YouTube iframe: как я могу управлять iframe-плеером, который уже находится в HTML? и включите его на странице.

Добавьте этот JS после того, как вы загрузили выше script (непосредственно перед закрывающим тегом body)

<script type="text/javascript">
    $('#myModal').on('hidden.bs.modal', function () {
        callPlayer('yt-player', 'stopVideo');
    });
</script>

Вам также потребуется добавить идентификатор в div, содержащий iframe, как показано ниже

<div class="modal-body" id="yt-player">
    <iframe src="//www.youtube.com/embed/sIFYPQjYhv8?rel=0&enablejsapi=1" allowfullscreen="" width="100%" frameborder="0" height="100%"></iframe>
</div>

Ответ 2

Здесь немного легче ответа на основе версии dizarter и одного из решений, на которые он ссылается.

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

Ответ 3

взгляните на мой код Мне не нужно было использовать какой-либо API

// on preview show iframe
$('#myModalPrev').on('show.bs.modal', function (e) {
  var idVideo = $(e.relatedTarget).data('id');
  $('#myModalPrev .modal-body').html('<iframe width="100%" height="400px" src="https://www.youtube.com/embed/' + idVideo + '?autoplay=true" frameborder="0" allowfullscreen></iframe>');
});
//on close remove
$('#myModalPrev').on('hidden.bs.modal', function () {
   $('#myModalPrev .modal-body').empty();
});

Ответ 4

И если мне нравится, когда вы хотите, чтобы видео было автовоспроизведено, а затем, чтобы остановить их, когда вы нажимаете кнопку "Модификация Bootstrap", вам нужно сделать что-то вроде этого:

$('.modal-iframe-youtube').click(function (e) {
        e.preventDefault();
        var sitetypeHref = $(this).attr('href');
        var sitetypeHrefAuto = sitetypeHref + "?autoplay=1"
        //sitetypeHref = sitetypeHref.replace('watch?v=', 'v/');
        $('#modal-window-iframe-youtube').on('shown.bs.modal', function () {
            var iFrame = $(this).find("iframe");
            iFrame.attr("src", sitetypeHrefAuto);
        });
        $("#modal-window-iframe-youtube").on('hidden.bs.modal', function () {
            var iFrame = $(this).find("iframe");
            iFrame.attr("src", sitetypeHref);
        });
        $('#modal-window-iframe-youtube').modal({ show: true });
    });

Обратите внимание, что я добавляю "? autoplay = 1" arg динамически. Надежда, которая помогает кому-то.

Ответ 5

Вот альтернатива для ответа CloudKiller, который фактически работает с автовоспроизведением, просто измените .attr на .removeAttr так:

jQuery('#myModal iframe').removeAttr("src", jQuery("#myModal iframe").removeAttr("src"));

Но еще более миниатюрная/упрощенная версия состоит в том, чтобы просто заменить src на пустое значение:

$('#myModal iframe').attr('src', '');

Таким образом, единственным кодом, который нужно добавить для этого, является:

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

Ответ 6

Чтобы написать эффективный код, прежде всего нам нужно проверить готовность DOM, что iframe существует или нет, если существует, поэтому переходите на следующий уровень, иначе ничего не делайте. Я также использовал ловушку.

$("#myModal").on("hidden.bs.modal", function() {

    var _this = this,
        youtubeSrc = $(_this).find("iframe").attr("src");

    if($(_this).find("iframe").length > 0){                     // checking if there is iframe only then it will go to next level
        $(_this).find("iframe").attr("src", "");                // removing src on runtime to stop video
        $(_this).find("iframe").attr("src", youtubeSrc);        // again passing youtube src value to iframe
    }
}

Ответ 7

Это решение, которое сработало для меня (немного взломанное):

Сначала я обернул iframe div с именем "VideoId" следующим образом:

<div id="VideoId" style="position: relative; padding: 25px; height: 0;">
    <iframe style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;"
    src="//www.youtube.com/etc..."
    frameborder="0" 
    allowfullscreen>
    </iframe>
</div>

Тогда я сделал эту функцию:

function CloseVideo(){
    document.getElementById("VideoId").innerHTML="&nbsp;";
};

И наконец, при закрытии моей кнопки Panel (это было модно в моем случае) я добавил событие oncklick, вызывающее мою функцию, например:

<button type="button" class="btn pull-right" onclick="CloseVideo();" data-dismiss="modal">Back</button>

Конечно, если вы хотите снова называть его, вы должны пополнить содержимое VideoId с помощью javascript следующим образом:

document.getElementById("VideoId").innertHTML=
 '<iframe style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;"+
    'src="//www.youtube.com/etc..."'+
    'frameborder="0"'+ 
    'allowfullscreen>'+
    '</iframe>';

Он отлично работает в Chrome, Firefox, IE и Opera.

P.S. Я попытался удалить div непосредственно из вызова onclick, но он продолжал сообщать о недостающей скобке, - я не знаю, почему...

Ответ 8

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example of Embedding YouTube Video inside Bootstrap Modal</title>
<link rel="stylesheet" href="#" onclick="location.href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css'; return false;">
<link rel="stylesheet" href="#" onclick="location.href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css'; return false;">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<style type="text/css">
    .bs-example{
        margin: 20px;
    }
    .modal-content iframe{
        margin: 0 auto;
        display: block;
    }
</style>
<script type="text/javascript">
$(document).ready(function(){
    /* Get iframe src attribute value i.e. YouTube video url
    and store it in a variable */
    $("#myModal").modal('show');
    var url = $("#cartoonVideo").attr('src');

    /* Assign empty url value to the iframe src attribute when
    modal hide, which stop the video playing */
    $("#myModal").on('hide.bs.modal', function(){
        $("#cartoonVideo").attr('src', '');
    });

    /* Assign the initially stored url back to the iframe src
    attribute when modal is displayed again */
    $("#myModal").on('show.bs.modal', function(){
        $("#cartoonVideo").attr('src', url);
    });
});
</script>
</head>
<body>
<div class="bs-example">
    <!-- Button HTML (to Trigger Modal) -->
    <a href="#myModal" class="btn btn-lg btn-primary" data-toggle="modal">Launch Demo Modal</a>

    <!-- Modal HTML -->
    <div id="myModal" class="modal fade">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title">YouTube Video</h4>
                </div>
                <div class="modal-body">
                    <iframe id="cartoonVideo" width="560" height="315" src="https://www.youtube.com/embed/LGWqUVFrfU4?autoplay=1&modestbranding=1&autohide=1&showinfo=0&controls=0" frameborder="0" allowfullscreen></iframe>
                </div>
            </div>
        </div>
    </div>
</div>     
</body>
</html>     

повторите эту проверку кода. он работает для меня красиво.