1. 程式人生 > >HTML5中video元素事件詳解

HTML5中video元素事件詳解

事 件的處理方式

在利用video元素或audio元素讀取或播放媒體資料的時候,會觸發一系的事件,如果使用JavaScript指令碼來捕捉這些事件,就可以對這些事件進行處理了。對這些事件的捕捉及處理,可以按兩種方式來進行。

第一種是監聽的方式,使用video元素或audio元素的addEventListener方法來對事件的發生進行監聽,該方法的定義如下所示。

videoElement.addEventListener ( type,listener,useCapture);

videoElement表示頁面上的video元素或audio元素。type為事件名稱,listener表示繫結的函式,useCapture是一個布林值,表示該事件的響應順序,該值如果為true,則瀏覽器採用Capture響應方式,如果為false,瀏覽器採用bubbing響應方式,一般採用fase,預設情況下也為false,如下使用方法。

  1. video.addEventListener("error",function(){
  2. /******程式碼段******/
  3. },false);

第二種事件處理方式為JavaScript指令碼常見的獲取事件控制代碼的方式,如下例所示。

  1. <videoid="video1"src="test.mov"onplay="begin_playing();"></video>
  2. function begin_playing(){
  3. /******程式碼段******/
  4. }

事件介紹

事件 描述
loadstart 瀏覽器開始在網上尋找媒體資料
progress 瀏覽器正在獲取媒體資料
suspend 瀏覽器暫停獲取媒體資料,但是下載過程並滑正常結束
abort 瀏覽器在下載完全部媒體資料之前中止獲取媒體資料,但是並不是由錯誤引起的
error 獲取媒體資料過程中出錯
emptied video元素或audio元素所在網路突然變為未初始化狀態可能原因有兩個:1.載入媒體過程中突然發生一個致命錯誤

2.在瀏覽器正在選擇支援的播放格式時,又呼叫 了load方法重新載入媒體

stalled 瀏覽器嘗試獲取媒體資料失敗
play 即將開始播放,當執行了play方法時觸發,或資料下載後元素被設為autoplay屬性
pause 播放暫停,當執行了pause方式時觸發
loadedmetadata 瀏覽器獲取完畢媒體的時間長和位元組數
waiting 播放過程由於得不到下一幀而暫停播放(例如下一幀尚未載入完畢),但很快就能夠得到下一幀
canplay 瀏覽器能夠播放媒體,但估計以當前的播放速率不能直接播放完畢,播放期間需要緩衝
canplaythrough 瀏覽器能夠播放媒體,而且以當前播放速率能夠將媒體播放完畢,不再需要進行緩衝
seeking seeking屬性變為true,瀏覽器正在請求資料
seeked seeking屬性變為false,瀏覽器停止請求資料
timeupdate 由於播放位置被改變,可能是播放過程中的自然改變,也可能是被人為的改變,或由於播放不能連續而發生的跳變
ended 播放結束後停止播放
ratechange defaultplaybackRate屬性(預設播放速率)或playbackRate屬性(當前播放速率)被改變
druationchange 播放時長被改變
volumechange volume屬性(音量)被改變或muted屬性(靜音狀態)被改變

事件捕捉示例

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <metacharset="UTF-8"/>
  5. <title>事件捕捉</title>
  6. <scripttype="text/javascript">
  7. function playOrPauseVideo(){
  8. var videoUrl = document.getElementById("videoUrl").value;
  9. var video = document.getElementById("video");
  10. //使用事件監聽方式捕捉事件
  11. video.addEventListener("timeupdate",function(){
  12. var timeDisplay = document.getElementById("time");
  13. //用秒數來顯示當前播放進度
  14. timeDisplay.innerHTML =Math.floor(video.currentTime)+"/"+Math.floor(video.duration)+" 秒";
  15. },false);
  16. if(video.paused){
  17. if(videoUrl != video.src){
  18. video.src = videoUrl;
  19. video.load();
  20. }else{
  21. video.play();
  22. }
  23. document.getElementById("playButton").value="暫停";
  24. }else{
  25. video.pause();
  26. document.getElementById("playButton").value ="播放";
  27. }
  28. }
  29. </script>
  30. </head>
  31. <body>
  32. <videoid="video"width="400"height="300"autoplayloop="loop"></video>
  33. <br/>
  34. 視訊地址:<inputtype="text"id="videoUrl"/>
  35. <inputtype="button"id="playButton"onClick="playOrPauseVideo()"value="播放"/>
  36. <spanid="time"></span>
  37. </body>
  38. </html>

我們看一個事件捕捉示例,在播放過程中會經常觸發timeupdat事件來通知當前的播放位置的改變,在該示例中,我們捕捉這個timeupdate事件來顯示當前的播放進度。