Остановить видео на youtube с помощью jquery?
У меня есть слайдер jquery, который я построил, в основном просто три панели, которые скользят, применяя отрицательные левые значения CSS. Работает отлично,но у меня есть видео на youtube в одном слайде, которое не останавливается, когда я скольжу. Я пробовал display: none и Visibility: hidden, который работает во всех, кроме IE, аудио продолжает идти в IE.
Есть ли простой способ убить видео с помощью jquery?
16 ответов:
Из API docs:
player.stopVideo()Итак, в jQuery:
$('#playerID').get(0).stopVideo();
Это решение простое, элегантное и работает во всех браузерах:
var video = $("#playerid").attr("src"); $("#playerid").attr("src",""); $("#playerid").attr("src",video);
1.включить
<script type="text/javascript" src="http://www.youtube.com/player_api"></script>2.добавьте свой iframe на youtube.
<iframe id="player" src="http://www.youtube.com/embed/YOURID?rel=0&wmode=Opaque&enablejsapi=1" frameborder="0"></iframe>3.волшебное время.
<script> var player; function onYouTubePlayerAPIReady() {player = new YT.Player('player');} //so on jquery event or whatever call the play or stop on the video. //to play player.playVideo(); //to stop player.stopVideo(); </script>
У меня уже была эта проблема, и я пришел к выводу, что единственный способ остановить видео в IE-удалить его из DOM.
Чтобы запустить видео
var videoURL = $('#playerID').prop('src'); videoURL += "&autoplay=1"; $('#playerID').prop('src',videoURL);Чтобы остановить видео
var videoURL = $('#playerID').prop('src'); videoURL = videoURL.replace("&autoplay=1", ""); $('#playerID').prop('src',''); $('#playerID').prop('src',videoURL);Вы можете заменить "&autoplay=1 " на "?autoplay=1 " в случае отсутствия дополнительных параметров
Работает как для vimeo, так и для youtube на FF & Chrome
Я столкнулся с той же проблемой. После множества альтернатив я просто сбросил embed src= "" с тем же URL-адресом.
Фрагмент кода:
$("#videocontainer").fadeOut(200);<br/> $("#videoplayer").attr("src",videoURL);Я смог, по крайней мере, остановить воспроизведение видео, когда я его скрывал.:- )
Мое решение для этого, которое работает для современного формата YouTube
embed, заключается в следующем.Предполагая, что
iframe, в котором воспроизводится ваше видео, имеетid="#video", Этот простой бит Javascript сделает свою работу.$(document).ready(function(){ var stopVideo = function(player) { var vidSrc = player.prop('src'); player.prop('src', ''); // to force it to pause player.prop('src', vidSrc); }; // at some appropriate time later in your code stopVideo($('#video')); });Я видел предлагаемые решения этой проблемы, включающие использование
YouTube API, но если ваш сайт не являетсяhttpsсайтом, или ваше видео встроено с использованием современного формата, рекомендованного YouTube, или если у вас есть набор опцийno-cookies, то эти решения не работают , и вы получаете эффект" телевизор на мертвый канал " вместо вашего видео.Я проверил вышеописанное на каждом браузере, который я мог бы наложить свои руки, и он работает очень надежно.
Если у вас есть свойство автозапуска в iframe src, это не поможет перезагрузить src attr / prop, поэтому вы должны заменить autoplay=1 на autoplay=0
var stopVideo = function(player) { var vidSrc = player.prop('src').replace('autoplay=1','autoplay=0'); player.prop('src', vidSrc); }; stopVideo($('#video'));
К сожалению, если атрибут id тега object не существует, функция play / stop/pauseVideo () не работает с IE.
<object style="display: block; margin-left: auto; margin-right: auto;" width="425" height="344" data="http://www.youtube.com/v/7scnebkm3r0&fs=1&border=1&autoplay=1&enablejsapi=1&version=3" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="allowfullscreen" value="true" /> <param name="src" value="http://www.youtube.com/v/7scnebkm3r0&fs=1&border=1&autoplay=1&enablejsapi=1&version=3" /> </object> <object id="idexists" style="display: block; margin-left: auto; margin-right: auto;" width="425" height="344" data="http://www.youtube.com/v/pDW47HNaN84&fs=1&border=1&autoplay=1&enablejsapi=1&version=3" type="application/x-shockwave-flash"> <param name="allowscriptaccess" value="always" /> <param name="allowFullScreen" value="true" /> <param name="src" value="http://www.youtube.com/v/pDW47HNaN84&fs=1&border=1&autoplay=1&enablejsapi=1&version=3" /> </object> <script> function pauseVideo() { $("object").each ( function(index) { obj = $(this).get(0); if (obj.pauseVideo) obj.pauseVideo(); } ); } </script> <button onClick="pauseVideo();">Pause</button>Попробуйте!
Ну, есть гораздо более простой способ сделать это. Когда вы захватите ссылку для вставки видео youtube, прокрутите немного вниз, и вы увидите некоторые варианты: для встраивания iframe, используйте старые размещения, связанных с видео и т. д. Там выберите использовать старую ссылку для вставки. Это решает проблему.
Это работает для меня как на YouTube, так и на Vimeo плеерах. Я в основном просто сбрасываю атрибут src, поэтому имейте в виду, что видео вернется к началу.
var $theSource = $theArticleDiv.find('.views-field-field-video-1 iframe').attr('src'); $theArticleDiv.find('.views-field-field-video-1 iframe').attr('src', $theSource); //reset the video so it stops playing$theArticleDiv-это контейнер моего текущего видео - поскольку у меня есть несколько видео на странице, и они выставляются через Drupal view во время выполнения, я понятия не имею, какими будут их идентификаторы. Поэтому я привязал событие muy click к текущему видимому элементу, нашел его родителя и решил, что это $theArticleDiv.
('.views-field-field-video-1 iframe') находит iframe текущего видео для меня - в частности, тот, который виден прямо сейчас. Этот iframe имеет атрибут src. Я просто беру это и возвращаю его обратно к тому, что он уже был, и автоматически видео останавливается и возвращается к началу. Если мои пользователи хотят приостановить и возобновить, они могут сделать это, не закрывая видео, конечно - но, честно говоря, если они действительно закрывают видео, я чувствую, что они могут жить с тем, что это сброс к началу.
HTH
Мне потребовалось немного разведать, чтобы понять это, но я остановился на этой кросс-браузерной реализации:
HTML
<div class="video" style="display: none"> <div class="mask"></div> <a href="#" class="close-btn"><span class="fa fa-times"></span></a> <div class="overlay"> <iframe id="player" width="100%" height="70%" src="//www.youtube.com/embed/Xp697DqsbUU" frameborder="0" allowfullscreen></iframe> </div> </div>JQuery
$('.launch-video').click(function() { $('.video').show(); $("#player").attr('src','//www.youtube.com/embed/Xp697DqsbUU'); }); $('.close-btn').click(function() { $('.video').hide(); $("#player").attr('src',''); });По сути, он открывает мой лайтбокс и заполняет мой атрибут src, а при закрытии просто удаляет значение src (затем повторно заполняет его при открытии).
Я получил это, чтобы работать на всех современных браузерах, включая IE9|IE8|IE7. Следующий код откроет ваше видео YouTube в режиме диалога jQuery UI, автоматически воспроизведет видео с 0: 00 при открытии диалога и остановит видео при закрытии диалога.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js" type="text/javascript"></script> <script src="http://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> google.load("swfobject", "2.1"); function _run() { /* YouTube player embed for modal dialog */ // The video to load. var videoID = "INSERT YOUR YOUTUBE VIDEO ID HERE" // Lets Flash from another domain call JavaScript var params = { allowScriptAccess: "always" }; // The element id of the Flash embed var atts = { id: "ytPlayer" }; // All of the magic handled by SWFObject (http://code.google.com/p/swfobject/) swfobject.embedSWF("http://www.youtube.com/v/" + videoID + "?version=3&enablejsapi=1&playerapiid=player1&autoplay=1", "videoDiv", "879", "520", "9", null, null, params, atts); } google.setOnLoadCallback(_run); $(function () { $("#big-video").dialog({ autoOpen: false, close: function (event, ui) { ytPlayer.stopVideo() // stops video/audio on dialog close }, modal: true, open: function (event, ui) { ytPlayer.seekTo(0) // resets playback to beginning of video and then plays video } }); $("#big-video-opener").click(function () { $("#big-video").dialog("open"); return false; }); }); </script> <div id="big-video" title="Video"> <div id="videoDiv">Loading...</div> </div> <a id="big-video-opener" class="button" href="#">Watch the short video</a>
На самом деле вам нужен только javascript и правильно построить встраивание видео youtube с помощью swfobject Google library
Вот пример
<script type="text/javascript" src="swfobject.js"></script> <div style="width: 425; height: 356px;"> <div id="ytapiplayer"> You need Flash player 8+ and JavaScript enabled to view this video. </div> <script type="text/javascript"> var params = { allowScriptAccess: "always" }; var atts = { id: "myytplayer" }; swfobject.embedSWF("http://www.youtube.com/v/y5whWXxGHUA?enablejsapi=1&playerapiid=ytplayer&version=3", "ytapiplayer", "425", "356", "8", null, null, params, atts); </script> </div>После этого вы можете вызвать следующие функции:
ytplayer = document.getElementById("myytplayer"); ytplayer.playVideo(); ytplayer.pauseVideo(); ytplayer.stopVideo();
Если вы используете иногда playerID.stopVideo (); не работает, вот трюк,
function stopVideo() { playerID.seekTo(0); playerID.stopVideo(); }
Comments