2012-03-19 15 views
6

ho un elemento <video> sulla mia pagina:HTML5 dell'evento video timeupdate non sparare

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

Nei miei JS si legge:

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

ora voglio accendere la console e digitare:

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

La cornice visualizzata cambierà, ma l'evento non si attiva. Secondo le specifiche timeupdate dovrebbe sparare quando currentTime was changed, quindi non penso che sto usando l'evento sbagliato? Tutti gli altri eventi che sto utilizzando (ad esempio play & ended) funzionano correttamente.

Ci sono un sacco di domande simili là fuori, eppure tutte quelle sembrano bug obsoleti? Questo è un altro bug (ho provato in Chrome 17 e FF10) o qualcosa è cambiato nella struttura dell'evento? O mi manca qualcosa di completamente diverso?

MODIFICA: Ho appena notato che questo problema si verifica solo quando il video non è ancora stato riprodotto. Quindi quando lo faccio:

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

L'evento si attiva come dovrebbe.

risposta

1

Quindi, come già indicato nella modifica alla mia domanda ho risolto questo con un approccio semplice e piuttosto stupido. Basta fare:

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

a "inizializzare" l'indicatore di riproduzione. Quindi si dovrebbe essere in grado di ottenere eventi timeupdate anche se nessuno ha mai avviato il video.

Su un lato nota: stranamente, impostando preload-auto fa innescare un precarico del video, ma non sembra per inizializzare l'indicatore di riproduzione.

2

l'evento viene inviato solo dopo l'inizializzazione del video. come hai appena indicato nel tuo commento di modifica, dove riproduci() e metti in pausa() il video, che precarica il video. stesso dovrebbe accadere, se si utilizza l'attributo precarico con Auto (auto = autore pensa che il browser deve caricare l'intero video al caricamento della pagina)

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

ma credo che si hanno risposto alla tua domanda te stesso ?!

+0

Quindi non c'è modo di rilevare se l'indicatore di riproduzione di un video è stato spostato prima che il video sia stato avviato per la prima volta? – m90

+1

forse stiamo parlando a scopi incrociati, ma come si può cercare un video, che non è stato caricato (o sta caricando) già? i tuoi comandi vengono mostrati sempre? hai un breve esempio per quel caso ?! .. forse questo sito aiuta anche: http: //www.w3.org/2010/05/video/mediaevents.html elenco di tutti gli eventi in un esempio dal vivo.cercato potrebbe essere il tuo attributo ?! – longilong

+0

Questo potrebbe essere un po 'complicato, ma vedi: http://goo.gl/uJyod - potresti voler mostrare l'elemento '

2

L'evento da utilizzare non è "timeupdate", penso che sia "cercato".
Quando si modifica il tempo corrente, prima si verifica un evento di ricerca, non appena il video è sincronizzato con l'ora selezionata, viene attivato l'evento "cercato".

Ho provato questo con Google 28 e ha funzionato senza bisogno di un .play() + .pause() sul controllo.