Видео HTML5 Остановка при закрытии

Я использую инструменты jQuery для наложения. Внутри оверлея у меня есть видео HTML5. Однако, когда я закрываю оверлей, видео продолжает воспроизводиться. Любая идея, как я могу остановить видео, когда я закрою оверлей? Вот код, который у меня есть:

$("img[rel]").overlay({ onClose: function() { <stop the video somehow> }, mask: { color: '#000', opacity: 0.7 }});

я пытался использовать

$('video').pause();

Но это также приостановило наложение.


person HWD    schedule 21.05.2010    source источник


Ответы (9)


Проблема может заключаться в том, что выбранный вами селектор jquery $("video") не является селектором

Правильным селектором может быть элемент id для тега video, т. е.
Допустим, ваш видеоэлемент выглядит так:

<video id="vid1" width="480" height="267" oster="example.jpg" durationHint="33"> 
    <source src="video1.ogv" /> 
    <source src="video2.ogv" /> 
</video> 

Затем вы можете выбрать его с помощью $("#vid1") с решеткой (#), селектором id в jquery. Если элемент видео отображается в функции, у вас есть доступ к HtmlVideoElement (HtmlMediaElement). Этот элемент имеет контроль над элементом видео, в вашем случае вы можете использовать метод pause() для своего элемента видео.

См. ссылку на VideoElement здесь.
Также проверьте, что здесь есть запасная ссылка.

person Myra    schedule 21.05.2010
comment
Использование идентификатора довольно раздражает, если у вас может быть N видео. - person WhyNotHugo; 01.09.2010
comment
Что делать, если я хочу остановить воспроизведение всех видео? (например, подстановочный знак) - person adib; 22.09.2010
comment
$("video") является селектором, но вы должны использовать $("video")[0], чтобы получить первое совпадение, например: $("video")[0].pause() - person forresto; 16.09.2012

Если вы хотите остановить воспроизведение каждого тега фильма на вашей странице, этот небольшой фрагмент jQuery поможет вам:

$("video").each(function () { this.pause() });
person Ulrik H. Kold    schedule 22.06.2012

Запуск видео в разных браузерах

Для Опера 12

window.navigator.getUserMedia(param, function(stream) {
                            video.src =window.URL.createObjectURL(stream);
                        }, videoError );

Для Firefox Nightly 18.0

window.navigator.mozGetUserMedia(param, function(stream) {
                            video.mozSrcObject = stream;
                        }, videoError );

Для Хрома 22

window.navigator.webkitGetUserMedia(param, function(stream) {
                            video.src =window.webkitURL.createObjectURL(stream);
                        },  videoError );

Остановка видео в разных браузерах

Для Опера 12

video.pause();
video.src=null;

Для Firefox Nightly 18.0

video.pause();
video.mozSrcObject=null;

Для Хрома 22

video.pause();
video.src="";
person Alain Saurat    schedule 08.10.2012
comment
Кажется, это на самом деле не направлено конкретно на заданный вопрос - person Andrew Barber; 08.10.2012

Для меня работает следующее:

$('video')[0].pause();
person jantoine    schedule 30.06.2011

У кого-то уже есть ответ.

$('video') вернет массив элементов видео. Это абсолютно правильный селектор!

so

$("video").each(function () { this.pause() });

заработает.

person George    schedule 26.09.2013

Для приложения JQM + PhoneGap у меня сработало следующее.

Следующее было минимумом, который я должен был сделать, чтобы заставить это работать. На самом деле я столкнулся с остановкой из-за буферизации при создании запросов ajax, когда пользователь нажимал кнопку «Назад». Приостановка видео в Chrome и браузере Android сохраняла его буферизацию. Неасинхронный запрос ajax зависнет в ожидании завершения буферизации, чего никогда не произойдет.

Привязка этого к событию beforepagehide исправила это.

 $("#SOME_JQM_PAGE").live("pagebeforehide", function(event)
 {
           $("video").each(function () 
           { 
               logger.debug("PAUSE VIDEO");
               this.pause();
               this.src = "";
           });
 });

Это удалит все теги видео на странице.

Важная часть это this.src = "";

person Halsafar    schedule 28.06.2012
comment
Я использовал $('video').each(function(k,v){ jQuery('video')[k].pause(); }); который работает для меня, получил идею из этой темы и темы @jantoine. Не тестировал с IE. - person raphie; 22.11.2014

Мой опыт работы с Firefox заключается в том, что добавление атрибута 'id' к видеоэлементу приводит к полному сбою Firefox... как если бы вас просили отправить отчет об ошибке. Удалите элемент id, и он отлично работает. Я не уверен, что это верно для всех, но я решил поделиться своим опытом, если это поможет.

person Jase in ATL    schedule 28.07.2010

Чтобы сэкономить часы кодирования, используйте подключаемый модуль jquery, уже оптимизированный для встроенных видео-iframe.

Я потратил пару дней, пытаясь безуспешно интегрировать API moogaloop Vimeo с инструментами jquery. См. этот список для нескольких более простых вариантов.

person Matth    schedule 13.04.2011

Попробуй это:

if ($.browser.msie)
{
   // Some other solution as applies to whatever IE compatible video player used.
}
else
{
   $('video')[0].pause();
}

Но учтите, что $.browser устарел, но я не нашел сопоставимого решения.

person DustyDigits    schedule 09.02.2012
comment
Поскольку $.broswer устарел, может быть, это не очень хорошее решение, особенно потому, что уже есть принятый ответ? - person random_user_name; 28.10.2012