2015-09-25 276 views
0

我使用視頻標籤在我的HTML頁面中嵌入了4秒長的視頻。我需要首先暫停視頻2秒,分別爲2.99s,3.44s和4.00s。爲了實現這一點,視頻需要從以前的實例恢復。如何暫停HTML視頻並通過循環自動恢復?

但經過長時間的努力,我一直無法找到解決方案。到目前爲止,我剛剛能夠讓視頻暫停> = 2.99s,但即使在使用setInterval函數後也不會恢復。

下面是代碼:

var vTag = document.getElementById('video'); 

setInterval(function() { pVideo();}, 2000); 

function pVideo() { 
     vTag.ontimeupdate = function(e) { 
     cTime = vTag.currentTime; 
     (cTime >= 2.9 || cTime >= 3.44 || cTime >= 4.00) ? vTag.pause(): vTag.play(); 
}; 
}; 

PS:視頻被用作標題部分中的背景的視頻。

+0

什麼做es控制檯日誌'cTime'爲? (不知道爲什麼這個問題是downvoted ..它清晰簡潔..)另外,就像一個節點,你可以'setInterval(pVideo,2000);'減少代碼混亂。沒有參數意味着你只能傳遞一個函數引用。 –

+0

@SterlingArcher感謝您的回覆。我不知道相同!如預期的cTime以秒爲單位輸出時間值。 –

+0

我想我明白了爲什麼。在你的if語句中,所有條件在2.9秒後總是成立。 –

回答

2

試試這個..這是一個完全工作代碼

HTML

<video id="video" autoplay muted loop> 
    <source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4"> 
    <source src="http://www.w3schools.com/html/mov_bbb.ogg" type="video/ogg"> 
    Your browser does not support HTML5 video. 
</video> 

JS

var vTag = document.getElementById('video'); 
vTag.play(); 
var wasPausedBefore1 = 0; 
var wasPausedBefore2 = 0; 
var wasPausedBefore3 = 0; 

vTag.ontimeupdate = function(e) { 
    cTime = vTag.currentTime; 
    if (cTime < 1) { 
     wasPausedBefore1 = 0; 
     wasPausedBefore2 = 0; 
     wasPausedBefore3 = 0; 
    } else if (cTime > 2.8 && cTime < 3.1 && wasPausedBefore1 == 0) { 
     vTag.pause(); 
     wasPausedBefore1 = 1; 
     setTimeout(function() { 
      vTag.play(); 
     }, 4000); 
    } else if(cTime > 3.3 && cTime < 3.6 && wasPausedBefore2 == 0){ 
     vTag.pause(); 
     wasPausedBefore2 = 1; 
     setTimeout(function() { 
      vTag.play(); 
     }, 4000); 
    } else if(cTime > 3.8 && cTime < 4.0 && wasPausedBefore3 == 0){ 
     vTag.pause(); 
     wasPausedBefore3 = 1; 
     setTimeout(function() { 
      vTag.play(); 
     }, 4000); 
    } 
}; 

這裏是工作提琴:https://jsfiddle.net/o9mknsx0/1/

+0

嘿真棒!這工作得很好。謝謝。 –

0

使用setTimeout而不是setInterval

我不知道,如果你能趕上需要使用timeupdate,因爲它激發每200ms或250ms的任一時間,但我會做到這一點,像這樣:

var vTag = document.getElementById('video'); 

vTag.addEventListener('timeupdate', function() { 
    var cTime = vTag.currentTime; 
    if(cTime === 2.99 || cTime === 3.44 || cTime === 4)) { 
     vTag.pause(); 
     setTimeout(function() { 
      vTag.play(); 
     }, 2000); 
    } 
}); 

爲了使它趕上你的時間,如2.993.44,那麼你需要使用setInterval10ms輪詢它。

setInterval(function() { 
    var cTime = vTag.currentTime; 
    if(cTime === 2.99 || cTime === 3.44 || cTime === 4) { 
     vTag.pause(); 
     setTimeout(function() { 
      vTag.play(); 
     }, 2000); 
    } 
}, 10); 
+0

謝謝,但我已經試過這段代碼(再次試圖加倍確定!)。這種方法的問題是,這甚至不會暫停視頻! 此外,我不能期望'==='工作,因爲我每讀250ms讀取timeupdate事件觸發器 –

+0

@unclesam我已經使用'setTimeout'添加了另一種方法。 –

+0

試過了!沒有工作!有一件事是肯定的,你永遠無法趕上確切的時間,你可能不得不使用一個範圍。試過了,沒有工作! –

0

你需要更新你的if語句以某種方式跟蹤暫停值,否則您的視頻無法播放,因爲後2.9秒,如果將永遠爲所有這些條件返回true。

var vTag = document.getElementById('video'); 

setInterval(pVideo, 2000); //function reference 

var nextPause = [2.9, 3.44, 4.00]; 
var pauseIndex = 0; 
function pVideo() { 
    vTag.ontimeupdate = function(e) { 
     cTime = vTag.currentTime; 
     var pauseTime = nextPause[pauseIndex]; 
     if (cTime >= pauseTime) { 
      vTag.pause(); 
      setTimeout(vTag.play, 2000); //unpause after 2 seconds 
      if (++index <= nextPause.length) index++ 
      else index = 0; 
     } 
    } 
}; 

這是未經測試的,我的邏輯可能有缺陷,但我覺得這個概念是有聲的。

將所有暫停時間放入數組中,並跟蹤上次使用的索引(如果需要,也可以重置(循環視頻))。然後,如果if語句匹配,請暫停視頻並運行超時2秒鐘以再次播放視頻。

+0

只是試過了!與原來的結果相同! 2.9秒後暫停,但從未恢復。我相信代碼永遠不會執行setTimeout函數,或者我試圖實現一些不可能的事情!順便說一句,如果我們以任何方式操作幀,那麼有沒有辦法? –

+0

這部分我不確定。嘗試做一些日誌記錄,我把它放入if語句,看看它是否執行 –

+0

我試過這個: 'setInterval(pVideo,2000); //函數參考 var nextPause = [2.9,3.44,4.00]; var pauseIndex = 0; var index = 0; function pVideo(){ vTag.ontimeupdate = function(e){ cTime = vTag.currentTime; var pauseTime = nextPause [pauseIndex]; (cTime> = pauseTime){ vTag.pause(); console.log(cTime); setTimeout(vTag.play,2000); // 2秒後取消暫停 console.log(cTime); (++ index <= nextPause.length)index ++ else index = 0;如果(++ index <= nextPause.length)index ++ else index = 0; } } };' –