Bootstrap 3 и Youtube в модальном режиме

Я пытаюсь использовать модальную функцию из Bootstrap 3, чтобы показать свое видео на Youtube. Это работает, но я не могу нажимать кнопки в видео Youtube.

Любая помощь по этому поводу?

Вот мой код:

<div id="link">My video</div>

<div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            </div>
            <div class="modal-body">
                <iframe width="400" height="300" frameborder="0" allowfullscreen=""></iframe>
            </div>
        </div>
    </div>
</div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-1.10.1.min.js"><\/script>')</script>
<script src="js/bootstrap.min.js"></script>
<script>
    $('#link').click(function () {
        var src = 'http://www.youtube.com/v/FSi2fJALDyQ&amp;autoplay=1';
        $('#myModal').modal('show');
        $('#myModal iframe').attr('src', src);
    });

    $('#myModal button').click(function () {
        $('#myModal iframe').removeAttr('src');
    });
</script>

person NitroMedia    schedule 04.09.2013    source источник


Ответы (19)


Я обнаружил эту проблему (или проблему, которую нашел и описал на странице https://github.com/twbs/bootstrap/issues/10489), связанных с преобразованием (переводом) CSS3 в классе .modal.fade .modal-dialog.

В bootstrap.css вы найдете строки, показанные ниже:

.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
      -ms-transform: translate(0, -25%);
          transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
     -moz-transition: -moz-transform 0.3s ease-out;
       -o-transition: -o-transform 0.3s ease-out;
          transition: transform 0.3s ease-out;
}

.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
      -ms-transform: translate(0, 0);
          transform: translate(0, 0);
}

Замена этих строк следующими приведет к правильному отображению фильма (в моем случае):

.modal.fade .modal-dialog {
  -webkit-transition: -webkit-transform 0.3s ease-out;
     -moz-transition: -moz-transform 0.3s ease-out;
       -o-transition: -o-transform 0.3s ease-out;
          transition: transform 0.3s ease-out;
}

.modal.in .modal-dialog {

}
person Bass Jobsen    schedule 06.09.2013
comment
Это не должен быть принятым ответом. Нельзя редактировать исходные файлы css. - person emix; 07.11.2019
comment
их можно переопределить (в новом файле), просто отключив каждое поле. transform: unset; - person Mac A.; 05.11.2020

Я собрал этот модальный сценарий динамического видео YouTube html / jQuery, который автоматически воспроизводит видео YouTube при нажатии триггера (ссылки), триггер также содержит ссылку для воспроизведения. Сценарий найдет собственный модальный вызов начальной загрузки и откроет общий модальный шаблон с данными из триггера. См. Ниже и дайте мне знать, что вы думаете. Хотелось бы услышать мысли ...

МОДАЛЬНЫЙ ТРИГГЕР HTML:

 <a href="#" class="btn btn-default" data-toggle="modal" data-target="#videoModal" data-theVideo="http://www.youtube.com/embed/loFtozxZG0s" >VIDEO</a>

HTML МОДАЛЬНЫЙ ВИДЕО ШАБЛОН:

<div class="modal fade" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="videoModal" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-body">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <div>
          <iframe width="100%" height="350" src=""></iframe>
        </div>
      </div>
    </div>
  </div>
</div>

ФУНКЦИЯ JQUERY:

//FUNCTION TO GET AND AUTO PLAY YOUTUBE VIDEO FROM DATATAG
function autoPlayYouTubeModal(){
  var trigger = $("body").find('[data-toggle="modal"]');
  trigger.click(function() {
    var theModal = $(this).data( "target" ),
    videoSRC = $(this).attr( "data-theVideo" ), 
    videoSRCauto = videoSRC+"?autoplay=1" ;
    $(theModal+' iframe').attr('src', videoSRCauto);
    $(theModal+' button.close').click(function () {
        $(theModal+' iframe').attr('src', videoSRC);
    });   
  });
}

ФУНКЦИОНАЛЬНЫЙ ЗВОНОК:

$(document).ready(function(){
  autoPlayYouTubeModal();
});

FIDDLE: http://jsfiddle.net/jeremykenedy/h8daS/1/

person jeremykenedy    schedule 13.05.2014
comment
Это привязывает событие к кнопке закрытия каждый раз, когда вы открываете модальное окно, а также вы должны использовать событие hidden.bs.modal как средство выключения видео, потому что пользователь может делать другие действия, чтобы закрыть модальное окно (например, щелкать за его пределами). - person Ian Clark; 13.02.2015
comment
Автовоспроизведение противоречит условиям Youtube API. Только что приложение отклонено с использованием веб-просмотра в магазине приложений для Android ... - person giorgio79; 16.09.2016
comment
Похоже, с вашим приложением что-то не так. Вот документация YouTube. developers.google.com/youtube/player_parameters support.google.com/youtube/answer/ - person jeremykenedy; 26.03.2017
comment
+1 Похоже, что сам Bootstrap имеет в виду ваш ответ: getbootstrap. com / docs / 4.3 / components / modal / - person Phmarc; 10.12.2019

У меня для тебя один совет!

Я хотел бы использовать:

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

вместо того:

$('#myModal button').click(function () {
    $('#myModal iframe').removeAttr('src');
});

Потому что вы также можете закрыть модальное окно без кнопки, поэтому с помощью этого кода он будет удалять видео каждый раз, когда модальное окно будет скрываться.

person Jeffrey Bouva    schedule 02.10.2013
comment
На первый взгляд это работает, но что, если вы захотите снова открыть это модальное окно. Вы не можете, потому что вы удалили 'src' - person kanlukasz; 04.05.2020

Нашел это в другом потоке, и он отлично работает на настольных компьютерах и мобильных устройствах, чего не было в некоторых других решениях. Добавьте этот скрипт в конец своей страницы:

<!--Script stops video from playing when modal is closed-->
<script>
    $("#myModal").on('hidden.bs.modal', function (e) {
        $("#myModal iframe").attr("src", $("#myModal iframe").attr("src"));
    });
</script>   
person user2232930    schedule 16.09.2014
comment
Этот код у меня работает. Просто и эффективно! Спасибо! - person Raimundo Baravaglio; 18.04.2020

Вот еще одно решение: Принудительно использовать HTML5-видео на YouTube

Просто добавьте? Html5 = 1 к исходному атрибуту в iframe, например:

<iframe src="http://www.youtube.com/embed/dP15zlyra3c?html5=1"></iframe>
person Chris Scheler    schedule 15.10.2013
comment
Параметр html5 = 1 сейчас (больше) ничего не делает. (Обратите внимание, что его даже нет в списке developers.google.com/youtube/player_parameters.) - person Adarsh Madrecha; 16.07.2018

Попробуйте это для Bootstrap 4

<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container-fluid">
<h2>Embedding YouTube Videos</h2>
<p>Embedding YouTube videos in modals requires additional JavaScript/jQuery:</p>

<!-- Buttons -->
<div class="btn-group">
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#videoModal" data-video="https://www.youtube.com/embed/lQAUq_zs-XU">Launch Video 1</button>
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#videoModal" data-video="https://www.youtube.com/embed/pvODsb_-mls">Launch Video 2</button>
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#videoModal" data-video="https://www.youtube.com/embed/4m3dymGEN5E">Launch Video 3</button>
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#videoModal" data-video="https://www.youtube.com/embed/uyw0VZsO3I0">Launch Video 4</button>
</div>

<!-- Modal -->
<div class="modal fade" id="videoModal" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
        <div class="modal-content">
            <div class="modal-header bg-dark border-dark">
                <button type="button" class="close text-white" data-dismiss="modal">&times;</button>
            </div>
            <div class="modal-body bg-dark p-0">
                <div class="embed-responsive embed-responsive-16by9">
                  <iframe class="embed-responsive-item" allowfullscreen></iframe>
                </div>
            </div>
        </div>
    </div>
</div>

</div>

<script>
$(document).ready(function() {
    // Set iframe attributes when the show instance method is called
    $("#videoModal").on("show.bs.modal", function(event) {
        let button = $(event.relatedTarget); // Button that triggered the modal
        let url = button.data("video");      // Extract url from data-video attribute
        $(this).find("iframe").attr({
            src : url,
            allow : "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
        });
    });

    // Remove iframe attributes when the modal has finished being hidden from the user
    $("#videoModal").on("hidden.bs.modal", function() {
        $("#videoModal iframe").removeAttr("src allow");
    });
});
</script>

</body>
</html>

посетите (ссылка не работает): https://parrot-tutorial.com/run_code.php?snippet=bs4_modal_youtube

person Vishal    schedule 12.06.2019

Если вы не хотите редактировать CSS начальной загрузки или все вышеперечисленное вам совсем не помогает (как в моем случае), есть простое решение, позволяющее запустить видео в модальном режиме в Firefox.

Вам просто нужно удалить класс «fade» из модального окна, а также открыть класс «in»:

$('#myModal').on('shown.bs.modal', function () {
    $('#myModal').removeClass('in');
});
person Sanzaru84    schedule 18.03.2014

Я решил это на шаблоне wordpress:

$videoLink ="http://www.youtube.com/watch?v=yRuVYkA8i1o;".   
<?php
    parse_str( parse_url( $videoLink, PHP_URL_QUERY ), $my_array_of_vars );
    $youtube_ID = $my_array_of_vars['v'];    
?> 
<a class="video" data-toggle="modal" data-target="#myModal" rel="<?php echo $youtube_ID;?>">
    <img src="<?php bloginfo('template_url');?>/assets/img/play.png" />
</a>

<div class="modal fade video-lightbox" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">    
    <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"></div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

<script> 
    jQuery(document).ready(function ($) {
        var $midlayer = $('.modal-body');     
        $('#myModal').on('show.bs.modal', function (e) {
            var $video = $('a.video');
            var vid = $video.attr('rel');
            var iframe = '<iframe />';  
            var url = "//youtube.com/embed/"+vid+"?autoplay=1&autohide=1&modestbranding=1&rel=0&hd=1";
            var width_f = '100%';
            var height_f = 400;
            var frameborder = 0;
            jQuery(iframe, {
                name: 'videoframe',
                id: 'videoframe',
                src: url,
                width:  width_f,
                height: height_f,
                frameborder: 0,
                class: 'youtube-player',
                type: 'text/html',
                allowfullscreen: true
            }).appendTo($midlayer);   
        });

        $('#myModal').on('hide.bs.modal', function (e) {
            $('div.modal-body').html('');
        }); 
    });
</script>
person Bijaya Kumar Oli    schedule 27.01.2014

Для Bootstrap 5

здесь я делюсь тем, что сработало для меня

Trigger button
<button data-bs-toggle="modal" data-tagVideo="https://www.youtube.com/embed/zcX7OJ-L8XQ" data-bs-target="#videoModal">Video</button>
Modal syntax
<div class="modal fade" id="videoModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="videoModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <div class="ratio ratio-16x9">
          <iframe src="" allow="autoplay;" allowfullscreen></iframe>
        </div>
      </div>
    </div>
  </div>
</div>
Function to get and autoplay Video from data
function autoPlayYouTubeModal() {
  var triggerOpen = $("body").find('[data-tagVideo]');
  triggerOpen.click(function() {
    var theModal = $(this).data("bs-target"),
      videoSRC = $(this).attr("data-tagVideo"),
      videoSRCauto = videoSRC + "?autoplay=1";
    $(theModal + ' iframe').attr('src', videoSRCauto);
    $(theModal + ' button.btn-close').click(function() {
      $(theModal + ' iframe').attr('src', videoSRC);
    });
  });
}
Call the function on document ready
<script>
  $(document).ready(function() {
    autoPlayYouTubeModal();
  });
</script>
And here the jsfiddle might have some Cors policy at first run
person Alemens    schedule 18.02.2021
comment
Спасибо, @Alemens! Как остановить воспроизведение видео после щелчка снаружи с помощью этого кода b5? Если убрать data-bs-backdrop = static data-bs-keyboard = false. - person Evgeny Sudakov; 26.05.2021

Bootstrap действительно предоставляет функциональные возможности модальных всплывающих окон из коробки.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<a class="btn btn-primary" data-toggle="modal" href="#modal-video"><i class="fa fa-play"></i> watch video</a>
<div class="modal fade" id="modal-video" style="display: none;">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">close <i class="fa fa-times"></i></button>
      </div>
      <div class="modal-body">
        <iframe type="text/html" width="640" height="360" src="//www.youtube.com/embed/GShZUiyqEH0?rel=0?wmode=transparent&amp;fs=1&amp;rel=0&amp;enablejsapi=1&amp;version=3" frameborder="0" allowfullscreen=""></iframe>
        <p>Your video</p>
      </div>
    </div>
  </div>
</div>

person jagdish.narkar    schedule 09.03.2017

Bootstrap 5 (для читателей, доходящих до этого из документы Bootstrap)

Это старый вопрос Bootstrap 3, но я не нашел каких-либо ответов, которые касались бы управления воспроизведением.

Как указано в документации Bootstrap, этот вопрос предназначен для решения проблемы модального окна требуется дополнительный JavaScript не в Bootstrap для автоматической остановки воспроизведения и т. Д.

Видео YouTube будет работать должным образом в модальном окне Bootstrap, если вы используете iframe вместо элемента video для предотвращения ошибок CORS. Однако iframe не имеет атрибутов для видео, таких как autoplay, loop, etc..., что означает, что единственными элементами управления воспроизведением являются те, которые встроены в видео YouTube. Например, вы не можете autostart просматривать видео при открытии модального окна (autostart = 1 больше не работает из YT API)

Здесь объясняется новый подход к управлению воспроизведением видео на YouTube. Вот как это будет работать с воспроизведением видео внутри модального окна Bootstrap 5.

Модальная разметка

<div class="modal fade" id="dynamicVideoModal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-fullscreen">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title"></h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body p-0">
                <div class="ratio ratio-21x9" id="player">
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn-dark" id="playBtn">Play</button>
                <button type="button" class="btn-dark" id="pauseBtn">Pause</button>
            </div>
        </div>
    </div>
</div>

JavaScript

var player
function onYouTubeIframeAPIReady() {
    console.log('onYouTubeIframeAPIReady...')
    player = new YT.Player('player', {
        videoId: 'M7lc1UVf-VE', // YT video source
        playerVars: {
            'playsinline': 1
        },
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        }
    })
}

function onPlayerReady(event) {
    event.target.playVideo() // autostart
}

function onPlayerStateChange(event) {
    // do other custom stuff here by watching the YT.PlayerState
}

function loadYouTubeVideo() {
    // 2. This code loads the IFrame Player API code asynchronously.
    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

}

var myModalEl = document.getElementById('dynamicVideoModal')
myModalEl.addEventListener('show.bs.modal', function (event) {
    // dynamically create video when modal is opened
    loadYouTubeVideo()
})


// optional hooks for controls outside YT
var playBtn = document.getElementById('playBtn')
playBtn.addEventListener('click', function (event) {
    console.log('play')
    player.playVideo()
})

var pauseBtn = document.getElementById('pauseBtn')
pauseBtn.addEventListener('click', function (event) {
    console.log('pause')
    player.pauseVideo()
})

Bootstrap 5, демонстрация воспроизведения YouTube

person Zim    schedule 11.06.2021
comment
Спасибо за ответ VanillaJS Bootstrap5, Зим. Пара замечаний, чтобы добавить: (1). В строке: player = new YT.Player('player', { ... 'player' в скобках соответствует div # player внутри модального тела. (2). Загрузка скриптов YT iframe API асинхронна, поэтому onPlayerReady(event) кажется единственным способом запустить воспроизведение видео. Другими словами, даже если loadYouTubeVideo() находится в событии show.bs.modal, вы не сможете запустить player.playVideo() внутри события shown.bs.modal, потому что оно, вероятно, не будет готово вовремя! - person Bung; 23.06.2021
comment
(3). Функция onYouTubeIframeAPIReady() должна находиться в глобальной области видимости, например, я не мог обернуть ее в свой собственный обработчик готовых документов. (4). Благодаря адаптивному характеру Bootstrap, модальные окна имеют различные настройки ширины в разных точках останова, поэтому вы, вероятно, захотите реализовать этот метод для увеличения ширины видео внутри .modal-body - person Bung; 23.06.2021
comment
(5). Если вы хотите использовать модальное окно в качестве шаблона для запуска различных видеороликов, на которые может нажать пользователь, то внутри #player я бы рекомендовал использовать ‹iframe› здесь. Затем вы можете сгенерировать новую строку src и изменить источник iframe на show.bs.modal перед вызовом loadYouTubeVideo() - person Bung; 23.06.2021
comment
Круто, спасибо за отзыв. Обновлю ответ. - person Zim; 23.06.2021
comment
Ура, не уверен, что ваш ответ нуждается в каких-либо обновлениях! Я просто имел в виду, что добавляю некоторые заметки для других о вещах, с которыми я столкнулся с немного другой реализацией :) - person Bung; 24.06.2021

Ммм ... Не могли бы вы опубликовать весь HTML-документ и какой браузер / версию вы используете?

Я воссоздал вашу страницу и протестировал ее в 3-х браузерах (Chrome, FF, IE8). Я смог остановить и запустить потрясающий трейлер WDS4 без каких-либо проблем. Вот мой код:

<!DOCTYPE html>
<html>
  <head>
    <title>Bootstrap 101 Template</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <link href="bootstrap.min.css" rel="stylesheet" media="screen">

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="../../assets/js/html5shiv.js"></script>
      <script src="../../assets/js/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div id="link">My video</div>

    <div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">

                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                </div>

                <div class="modal-body">
                    <iframe width="400" height="300" frameborder="0" allowfullscreen=""></iframe>
                </div>
            </div>
        </div>
    </div>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="jq.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="bootstrap.min.js"></script>
    <script>
    $('#link').click(function () {
        var src = 'http://www.youtube.com/v/FSi2fJALDyQ&amp;autoplay=1';
        $('#myModal').modal('show');
        $('#myModal iframe').attr('src', src);
    });

    $('#myModal button').click(function () {
        $('#myModal iframe').removeAttr('src');
    });
</script>
  </body>
</html>

Вы могли бы попробовать поднять Z-индекс вашего модального плеера выше в стеке?

$('#myModal iframe').css("z-index","999");

person TyMayn    schedule 04.09.2013
comment
Я пробовал ваш код, но он не работал. Я не могу нажать ни на одну кнопку в видео (пауза, громкость звука, качество и т. Д.). Вы поняли, что я не могу использовать никакие кнопки YOUTUBE? Смотрю в Firefox. - Какую версию jquery вы используете? Я использую 1.10.1 - Вы использовали Bootstrap 3? - person NitroMedia; 05.09.2013
comment
Продолжаю мои тесты: НЕ РАБОТАЕТ в Firefox РАБОТАЕТ в Chrome РАБОТАЕТ в Safari - person NitroMedia; 05.09.2013
comment
Поэтому я использую ваш код, тестирую его везде, и он работает везде, кроме Firefox. На Mac при наведении курсора на кнопку цвет меняется, но я не могу щелкнуть по ним. На ПК экран остается черным, и воспроизводится видео. Это сводит меня с ума! Я попытался запустить firefox в безопасном режиме, очистить кеш, ничего не работает. - person NitroMedia; 05.09.2013
comment
Я обнаружил ту же проблему. Для Firefox для ubuntu 23.0. Но у меня возникла ошибка TypeError: Value not an object. s.ytimg.com/yts/jsbin/www-embed- player-vflwWlnaY.js (строка 220). В хроме ваш код работает. - person Bass Jobsen; 06.09.2013
comment
Ммм ... Я воссоздал его локально на своем Mac, и он пытается загрузить идентификатор видео. Позвольте мне отправить его на свой сервер и посмотреть, является ли это локальной ошибкой. - person TyMayn; 07.09.2013

использование $('#introVideo').modal('show'); конфликтует с правильным запуском начальной загрузки. Когда вы нажимаете на ссылку, открывающую модальное окно, оно закрывается сразу после завершения анимации затухания. Просто удалите $('#introVideo').modal('show'); (используя bootstrap v3.3.2)

Вот мой код:

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
<!-- triggering Link -->
<a id="videoLink" href="#0" class="video-hp" data-toggle="modal" data-target="#introVideo"><img src="img/someImage.jpg">toggle video</a>


<!-- Intro video -->
<div class="modal fade" id="introVideo" tabindex="-1" role="dialog" aria-labelledby="introductionVideo" aria-hidden="true">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      </div>
      <div class="modal-body">
        <div class="embed-responsive embed-responsive-16by9">
            <iframe class="embed-responsive-item allowfullscreen"></iframe>
        </div>
      </div>
    </div>
  </div>
</div>


<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"> </script>

<script>
  //JS

$('#videoLink').click(function () {
    var src = 'https://www.youtube.com/embed/VI04yNch1hU;autoplay=1';
    // $('#introVideo').modal('show'); <-- remove this line
    $('#introVideo iframe').attr('src', src);
});


$('#introVideo button.close').on('hidden.bs.modal', function () {
    $('#introVideo iframe').removeAttr('src');
})
</script>

person Imadeddine Bouziani    schedule 19.03.2015

Ответ user3084135 хорошо работал для меня, но мне также нужно было включить:

  1. Тег video для видео, размещенного на локальном сервере, а также тег iframe для видео, размещенного на внешнем сервере.
  2. Убедитесь, что источник был удален, но модальное окно было закрыто.
  3. Решение работало в адаптивном дизайне Bootstrap.
  4. Все видео воспроизводятся автоматически при открытии модального окна
  5. Возможны несколько модальных окон

Мое готовое решение выглядит так:

КНОПКА МОДАЛЬНОГО ТРИГГЕРА

<a href="#" class="portfolio-link" data-toggle="modal" data-frame="iframe" data-target="#portfolioModal1" data-theVideo="http://www.youtube.com/embed/xxxxxxxx">

Атрибут кадра данных может иметь значение «iframe» или «видео», чтобы отразить соответствующий тип тега: iframe для внешних видео, видео для локального размещения.

BOOTSTRAP ОТВЕТСТВЕННЫЕ КОНТЕЙНЕРЫ ВИДЕО

iFrame:

<div align="center" class="embed-responsive embed-responsive-16by9">
  <iframe width="420" height="315" src="" frameborder="0" allowfullscreen></iframe>
</div>

видео:

<div align="center" class="embed-responsive embed-responsive-16by9">
    <video width="640" height="364" controls>
        <source src="" type="video/mp4">
        Your browser does not support the video tag.
    </video>                               
</div>

Оба они находятся в стандартных адаптивных модальных div Bootstrap.

СЦЕНАРИЙ JQUERY

<script>
 $(document).ready(function(){
    function autoPlayModal(){
      var trigger = $("body").find('[data-toggle="modal"]');
      trigger.click(function() {
        var theFrame = $(this).data( "frame" );
        var theModal = $(this).data( "target" );
        videoSRC = $(this).attr( "data-theVideo" ); 
        if (theFrame == "iframe") {
          videoSRCauto = videoSRC+"?autoplay=1" ;
        } else {
          videoSRCauto = videoSRC;
          $("[id*=portfolioModal] video").attr('autoplay','true');
        }
        $(theModal+' '+ theFrame).attr('src', videoSRCauto); 
        $("[id*=portfolioModal]").on('hidden.bs.modal', function () {
            $("[id*=portfolioModal] "+ theFrame).removeAttr('src');
        })
      });
    }

  autoPlayModal();
});
</script>

Поскольку автовоспроизведение по-разному работает с тегами iframe и видео, для каждого из них используется условное выражение. Чтобы разрешить использование нескольких модальных окон, для их идентификации используется селектор с подстановочными знаками (в моем случае портфолиоModal1-6).

person awvidmer    schedule 05.06.2015

У меня была такая же проблема - я только что добавил ссылки на cdn с отличным шрифтом - комментирование начальной загрузки, приведенное ниже, решило мою проблему ... на самом деле не удалось устранить ее, так как отличный шрифт все еще работал -

<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.no-icons.min.css" rel="stylesheet">
person Fstarocka Burns    schedule 26.06.2016

Ok. Я нашел решение.

                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">
                        <span aria-hidden="true">&times;</span><span class="sr-only">Close</span>
                    </button>
                    <h3 class="modal-title" id="modal-login-label">Capital Get It</h3>
                    <p>Log in:</p>
                </div>

                <div class="modal-body">

                    <h4>Youtube stuff</h4>



             <iframe src="//www.youtube.com/embed/lAU0yCDKWb4" allowfullscreen="" frameborder="0" height="315" width="100%"></iframe>       
             </div>


                </div>

            </div>
        </div>
    </div>
person Mwangi Thiga    schedule 11.03.2017

Для Bootstrap 4, который обрабатывает видео, изображения и страницы ...

http://jsfiddle.net/c4j5pzua/

$('a[data-modal]').on('click',function(){
	var $page = $(this).data('page');
	var $image = $(this).data('image');
	var $video = $(this).data('video');
	var $title = $(this).data('title');
	var $size = $(this).data('size');
	$('#quickview .modal-title').text($title);
	if ($size) { $('#quickview .modal-dialog').addClass('modal-'+$size); }
	if ($image) {
		$('#quickview .modal-body').html('<div class="text-center"><img class="img-fluid" src="'+$image+'" alt="'+$title+'"></div>');
	} else if ($video) {
		$('#quickview .modal-body').html('<div class="embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item" src="https://www.youtube-nocookie.com/embed/'+$video+'?autoplay=1" allowfullscreen></iframe></div>');
	}
	if ($page) {
		$('#quickview .modal-body').load($page,function(){
			$('#quickview').modal({show:true});
		});
	} else {
		$('#quickview').modal({show:true});
	}
	$('#quickview').on('hidden.bs.modal', function(){
		$('#quickview .modal-title').text('');
		$('#quickview .modal-body').html('');
		if ($size) { $('#quickview .modal-dialog').removeClass('modal-'+$size); }
	});
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>

<div class="container my-4">

<h3 class="mb-4">Bootstrap 4 Modal YouTube Videos, Images & Pages</h3>

<a href="javascript:;" class="btn btn-primary" data-modal data-video="zpOULjyy-n8" data-title="Video Title" data-size="xl">Video</a>

<a href="javascript:;" class="btn btn-primary" data-modal data-image="https://v4-alpha.getbootstrap.com/assets/brand/bootstrap-social-logo.png" data-title="Image Title" data-size="">Image</a>

<a href="javascript:;" class="btn btn-primary" data-modal data-page="https://getbootstrap.com" data-title="Page Title" data-size="lg">Page *</a>

<p class="mt-4">* Clicking this will break it, but it'll work using a local page!</p>

</div>

<div class="modal fade" id="quickview" tabindex="-1" role="dialog" aria-labelledby="quickview" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body"></div>
</div>
</div>
</div>

person xcartmods    schedule 22.03.2019

Использование ПОСЛЕДНИХ Bootstrap 4.5+

  • Повторное использование одного и того же модального окна, передавая разные URL-адреса Youtube со страницы HTML
  • С отличным значком кнопки воспроизведения и включенным автовоспроизведением
  • Просто КОПИРУЙТЕ код, и все УСТАНОВЛЕНО !!!
  • Просмотреть решение в Codepen

    // javascript using jQuery - can embed in the script tag
$(".video-link").click(function () {
  var theModal = $(this).data("target");
  videoSRC = $(this).attr("data-video");
  videoSRCauto = videoSRC + "?modestbranding=1&rel=0&showinfo=0&html5=1&autoplay=1";
  $(theModal + ' iframe').attr('src', videoSRCauto);
  $(theModal + ' button.close').click(function () {
    $(theModal + ' iframe').attr('src', videoSRC);
  });
});
#video-section .modal-content {
  min-width: 600px;
}

#video-section .modal-content iframe {
  width: 560px;
  height: 315px;
}
<!-- HTML with Bootstrap 4.5 and Fontawesome -->
<html>
   <head>
      <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.1/css/all.css"
         integrity="sha384-xxzQGERXS00kBmZW/6qxqJPyxW3UR0BPsL4c8ILaIWXva5kFi7TxkIIaMiKtqV1Q" crossorigin="anonymous">
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
   </head>

   <body>
      <section id="video-section" class="py-5 text-center text-white">
         <div class="container h-100 d-flex justify-content-center">
            <div class="row align-self-center">
               <div class="col">
                  <div class="card bg-dark border-0 mb-2 text-white">
                     <div class="card-body">
                        <a href="#" class="btn btn-primary bg-dark stretched-link video-link" data-video="https://www.youtube.com/embed/HnwsG9a5riA" data-toggle="modal" data-target="#video-modal">
                        <i class="fas fa-play fa-3x"></i>
                        </a>
                        <h1 class="card-title">Play Video</h1>
                     </div>
                  </div>
               </div>
            </div>
         </div>

         <!-- Video Modal -->
         <div class="modal fade" id="video-modal" tabindex="-1" role="dialog">
            <div class="modal-dialog h-100 d-flex align-items-center">
               <div class="modal-content">
                  <div class="modal-body">
                     <button type="button" class="close" data-dismiss="modal">
                     <span>&times;</span>
                     </button>
                     <iframe frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
                  </div>
               </div>
            </div>
         </div>
      </section>

      <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
      <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>

   </body>
</html>



  [1]: https://codepen.io/richierich25/pen/yLOOYBL
person RICHARD ABRAHAM    schedule 14.08.2020
comment
Этот код работает для видео vimeo? Или нужны изменения - person Gendrith; 21.12.2020

person    schedule
comment
Пример не запускается - person Papa De Beau; 14.01.2017