2012-03-19 13 views
6

tengo un elemento <video> en mi página:HTML5 caso timeupdate vídeo no disparar

<video id="myVideo"> 
    <source src="vid.mp4" type="video/mp4" /> 
    <source src="vid.ogg" type="video/ogg" /> 
</video> 

En mis JS se lee:

var v = $('#myVideo')[0]; 
v.addEventListener('timeupdate',function(){ 
    alert('I changed'); 
},false); 

Ahora voy a encender mi consola y escriba:

$('#myVideo')[0].currentTime = 2; 

El marco mostrado cambiará, pero el evento no se disparará. De acuerdo con las especificaciones timeupdate debe disparar cuando currentTime was changed, por lo que no creo que estoy utilizando el evento equivocado? Todos los demás eventos que estoy usando (es decir, play & ended) funcionan perfectamente.

Hay muchas preguntas similares por ahí, ¿pero todas parecen ser errores obsoletos? ¿Es este otro error más (lo probé en Chrome 17 y FF10) o cambió algo en la estructura del evento? ¿O me estoy perdiendo algo completamente diferente?

EDIT: Me acabo de dar cuenta de que este problema solo ocurrirá cuando el video aún no se haya reproducido. Entonces cuando lo haga:

$('#myVideo')[0].play(); 
$('#myVideo')[0].pause(); 
$('#myVideo')[0].currentTime = 2; 

El evento se disparará justo como debería.

Respuesta

1

Por lo tanto, como ya se indicó en la edición de mi pregunta, he resuelto esto con un enfoque simple y bastante estúpido. Solo hazlo:

video.play(); 
video.pause(); 

para "inicializar" la cabeza lectora. Entonces uno debería poder obtener los eventos timeupdate, incluso si nadie alguna vez comenzó el video.

En una nota al margen: curiosamente, la configuración de preload a auto activa una precarga del video, sin embargo, no parece inicializar la cabeza lectora.

2

el evento solo se envía una vez que se ha inicializado el video. como acaba de señalar en su edición de comentario, donde reproduce() y pausa() el video, que precarga el video. mismo debería suceder, si se utiliza el atributo de precarga con el auto (auto = autor piensa que el navegador debe cargar todo el vídeo cuando se carga la página)

<video preload="auto|metadata|none"> 

pero supongo que responde a tu pregunta a sí mismo ?!

+0

¿No hay manera de detectar si la cabeza lectora de un video se ha movido antes de que el video se haya iniciado por primera vez? – m90

+1

tal vez estamos hablando de propósitos cruzados, pero ¿cómo podemos buscar un video que ya no se haya cargado (o esté cargando)? ¿Se muestran tus controles todo el tiempo? ¿Tienes un pequeño ejemplo para ese caso? ..puede que este sitio ayude también: http: //www.w3.org/2010/05/video/mediaevents.html lista de todos los eventos en un ejemplo en vivo.buscado podría ser tu atributo ?! – longilong

+0

Esto puede ser un poco complicado, sin embargo, consulte: http://goo.gl/uJyod. Puede que quiera mostrar el elemento '

2

El evento a usar no es "timeupdate", creo que es "buscado".
Cuando cambia el tiempo actual, primero ocurre un evento de "búsqueda" tan pronto como el video está sincronizado con el tiempo elegido, se desencadena el evento "buscado".

Probé esto con Google 28 y funcionó sin necesidad de un .play() + .pause() en el control.

Cuestiones relacionadas