2010-05-21 18 views
15

Estoy usando herramientas jQuery para una superposición. Dentro de la superposición tengo un video HTML5. Sin embargo, cuando cierro la superposición, el video continúa reproduciéndose. ¿Alguna idea de cómo puedo hacer para detener el video cuando cierro la plantilla? Aquí está el código que tengo:HTML5 Video Detener onClose

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

He intentado utilizar

$('video').pause(); 

Pero esto detuvo la superposición también.

Respuesta

8

El problema puede ser con selector de jQuery elegido $("video") no es un selector

El selector hacia la derecha puede estar poniendo una elemento Identificación de vídeo etiqueta es decir
Digamos que el vídeo de elementos miradas de esta manera:

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

a continuación, se puede seleccionar a través de $("#vid1") con signo de número (#), selector de id en jquery. Si un elemento de video está expuesto en la función, entonces tiene acceso a HtmlVideoElement (HtmlMediaElement) .Este elemento tiene control sobre el elemento de video, en su caso puede usar el método pause() para su elemento de video.

Consulte la referencia para VideoElement here.
También verifique que haya una referencia de respaldo here.

+1

Usar una identificación es bastante molesto si puedes tener N videos. – WhyNotHugo

+1

¿Qué ocurre si quiero detener la reproducción de _todos los videos? (por ejemplo, comodín) – adib

+21

'' '$ (" video ")' '' * es * un selector, pero tienes que usar '' '$ (" video ") [0]' '' para obtener la primera coincidencia, como : '' '$ (" video ") [0] .pause()' '' – forresto

2

Mi experiencia con Firefox es que agregar el atributo 'id' a un elemento de video hace que Firefox se bloquee por completo ... al pedirle que envíe un informe de error. Elimine el elemento id y funciona bien. No estoy seguro de si esto es cierto para todos, pero pensé que compartiría mi experiencia en caso de que me ayudara.

1

Para ahorrar horas de tiempo de codificación, use un plugin jquery ya optimizado para iframes de video incrustado.

Pasé un par de días tratando de integrar la API de moogaloop de Vimeo con herramientas de jquery sin éxito. Ver this list para un puñado de opciones más fáciles.

9

Los siguientes obras para mí:

$('video')[0].pause(); 
0

Prueba esto:

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

embargo, consideran que $ .browser está en desuso, pero no han encontrado una solución comparable.

+2

Dado que '$ .broswer' está en desuso, tal vez esta no sea una buena solución, ¿sobre todo porque ya hay una respuesta aceptada? –

22

Si desea detener todas las etiquetas de película en la página de jugar, este pequeño fragmento de jQuery le ayudará a:

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

Para una JQM + PhoneGap APP los siguientes trabajó para mí.

Lo siguiente fue lo mínimo que tuve que hacer para que esto funcione. De hecho, estaba experimentando un bloqueo debido al almacenamiento en búfer mientras generaba solicitudes de ajax cuando el usuario presionaba el botón Atrás.La pausa del video en Chrome y el navegador de Android lo mantuvieron en el búfer. La solicitud de ajax no asincrónica se atascaría esperando a que terminara el almacenamiento en búfer, lo que nunca ocurriría.

Al enlazar esto con el evento beforepagehide lo arregló.

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

Esto borrará todas las etiquetas de video de la página.

La parte importante es this.src = "";

+0

Usé $ ('video'). Cada uno (función (k, v) {jQuery ('video') [k] .pause();}); que funciona para mí, obtuvo la idea de este hilo y el hilo @jantoine. No he probado con IE. – raphie

9

vídeo Comenzando con diferentes navegadores

Para Opera 12

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

para Firefox Nightly 18,0

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

para Chrome 22

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

Detención de vídeo con diferentes navegadores

Para Opera 12

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

para Firefox Nightly 18,0

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

para Chrome 22

video.pause(); 
video.src=""; 
+0

Esto parece no estar dirigido específicamente a la pregunta –

6

Alguien ya tiene la respuesta.

$ ('video') devolverá una matriz de elementos de video. ¡Es totalmente un selector válido!

por lo

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

va a funcionar.