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&autoplay=1';
$('#myModal').modal('show');
$('#myModal iframe').attr('src', src);
});
$('#myModal button').click(function () {
$('#myModal iframe').removeAttr('src');
});
</script>
15 ответов:
Я нашел эту проблему (или проблему, которую я нашел и описал в 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 { }
Я собрал этот html / jQuery dynamic YouTube video modal script, который автоматически воспроизводит видео YouTube при нажатии на триггер (ссылку), триггер также содержит ссылку для воспроизведения. Скрипт найдет собственный модальный вызов bootstrap и откроет общий модальный шаблон с данными из триггера. Смотрите ниже и дайте мне знать, что вы думаете. Я хотел бы услышать мысли...
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">×</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(); });
у меня есть один совет для вас!
Я хотел бы использовать:
$('#myModal').on('hidden.bs.modal', function () { $('#myModal iframe').removeAttr('src'); })вместо:
$('#myModal button').click(function () { $('#myModal iframe').removeAttr('src'); });потому что вы также можете закрыть модальный без кнопки, так что там с этим кодом он будет удалять видео каждый раз, когда модальный будет скрываться.
вот еще одно решение: Force HTML5 youtube video
просто добавить ?html5=1 к исходному атрибуту на iframe, например:
<iframe src="http://www.youtube.com/embed/dP15zlyra3c?html5=1"></iframe>
нашел это в другой ветке, и он отлично работает на настольных и мобильных - что не так с некоторыми другими решениями. Добавить этот скрипт в конец страницы:
<!--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>
Если вы не хотите редактировать Bootstrap CSS или все вышеперечисленное не поможет вам вообще (как в моем случае), есть простое решение, чтобы получить видео работает в модальном режиме на Firefox.
вам просто нужно удалить класс " fade "из модального и как он открывает класс" in " тоже:
$('#myModal').on('shown.bs.modal', function () { $('#myModal').removeClass('in'); });
Я решил его на 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">×</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>
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&fs=1&rel=0&enablejsapi=1&version=3" frameborder="0" allowfullscreen=""></iframe> <p>Your video</p> </div> </div> </div> </div>
MMhh... Не могли бы вы опубликовать весь свой 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&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");
<a href="#" class="btn btn-default" id="btnforvideo" data-toggle="modal" data-target="#videoModal">VIDEO</a> <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">×</button> <div> <iframe width="100%" height="315" src="https://www.youtube.com/embed/myvideocode" frameborder="0" allowfullscreen></iframe> </div> </div> </div> </div> </div>
используя
$('#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">×</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>
ответ user3084135 хорошо работал в качестве основы для меня, но мне также нужно было включить:
- тег "video "для локально размещенного видео, а также тег" iframe " для внешне размещенного видео
- убедитесь, что источник был удален, однако модальный был отклонен
- решение работало в Bootstrap responsive design
- все видео автоматически воспроизводятся на модальном открытом
- возможны несколько модалов
мой готовое решение выглядит так:
МОДАЛЬНАЯ КНОПКА ЗАПУСКА
<a href="#" class="portfolio-link" data-toggle="modal" data-frame="iframe" data-target="#portfolioModal1" data-theVideo="http://www.youtube.com/embed/xxxxxxxx">атрибут data-frame может быть либо "iframe", либо "video", чтобы отразить соответствующий тип тега: iframe для внешних видео, video для локального хостинга.
BOOTSTRAP RESPONSIVE VIDEO CONTAINERS
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>они оба находятся в пределах стандартных 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 и video, для каждого из них используется условное обозначение. Чтобы разрешить несколько модалов, селектор подстановочных знаков используется для их идентификации (portfolioModal1-6 в моем случае).
У меня была такая же проблема - я только что добавил шрифт-удивительные ссылки cdn - комментируя bootstrap один ниже решил мою проблему.. на самом деле это не устраняло неполадок, так как шрифт awesome все еще работал -
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.no-icons.min.css" rel="stylesheet">
ОК. Я нашел решение.
<div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true">×</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>
$('#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 src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> <!-- 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">×</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>
Comments