2012-03-19 21 views
6

muszę element <video> na mojej stronie:HTML5 wydarzenie timeupdate wideo nie wypalanie

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

W moim JS to brzmi:

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

Teraz będę odpalić konsolę i wpisz:

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

Wyświetlana klatka zmieni się, ale wydarzenie się nie uruchomi. Według specyfikacji timeupdate powinien wystrzelić kiedy currentTime was changed, więc nie sądzę, że używam niewłaściwego zdarzenia? Wszystkie inne zdarzenia, z których korzystam (tzn. play & ended) działają poprawnie.

Istnieje wiele podobnych pytań, ale wszystkie wydają się być przestarzałymi błędami? Czy to kolejny błąd (testowałem w Chrome 17 i FF10), czy coś zmieniło się w strukturze wydarzenia? Czy może brakuje mi czegoś zupełnie innego?

EDYCJA: Po prostu zauważyłem, że ten problem wystąpi tylko wtedy, gdy wideo jeszcze nie było odtwarzane. Kiedy więc to zrobię:

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

Impreza zostanie uruchomiona dokładnie tak, jak powinna.

Odpowiedz

1

Tak więc, jak już stwierdzono w edycji mojego pytania, rozwiązałem to z prostym i dość głupim podejściem. Po prostu wykonaj:

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

, aby "zainicjować" głowicę. Wtedy powinno być możliwe uzyskanie wydarzeń timeupdate, nawet jeśli nikt nigdy nie rozpoczął filmu.

Na marginesie: dziwne, ustawienie preload na auto powoduje uruchomienie wstępnego załadowania wideo, ale nie wydaje się, aby zainicjować głowicę.

2

zdarzenie jest wywoływane tylko po zainicjowaniu wideo. jak właśnie wskazałeś w komentarzu do edycji, w którym odtwarzasz() i wstrzymujesz() wideo, które wstępnie ładuje wideo. To samo powinno się zdarzyć, jeśli użyć atrybutu napięcia wstępnego z AUTO (= autor uważa, że ​​przeglądarka powinna wczytać cały film po załadowaniu strony)

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

ale myślę odpowiedziałeś na pytanie sobie ?!

+0

Nie można więc ustalić, czy głowica wideo została przeniesiona przed pierwszym uruchomieniem wideo? – m90

+1

może rozmawiamy na krzyżu, ale jak możesz szukać filmu, który nie został załadowany (lub jest ładowany)? czy kontrolki są wyświetlane przez cały czas? czy macie na to krótki przykład ?! .. może ta strona również pomaga: http: //www.w3.org/2010/05/video/mediaevents.html listę wszystkich wydarzeń w żywym przykładzie.poszukiwany może być twoim atrybutem ?! – longilong

+0

To może być trochę skomplikowane, ale zobacz: http://goo.gl/uJyod - możesz chcieć odkryć element '

2

Wydarzenie, którego należy użyć, nie jest "timeupdate", myślę, że jest "szukane".
Po zmianie czasu bieżącego, najpierw następuje "szukanie" zdarzenia, gdy tylko wideo jest zsynchronizowane z wybranym czasem, zostaje wywołane zdarzenie "szukane".

Przetestowałem to z Google 28 i działało bez potrzeby .play() + .pause() na formancie.