2013-02-11 2183 views
9

VideoJS website上,您聲明支持已移至StackOverflow,因此我們在此嘗試。我有以下代碼:VideoJS - 無法銷燬並初始化

var player = _V_('the_id', {}, function(){ 
    jQuery('.remove').on('click.destroyvideojs', function(){ 
     player.destroy(); 
     jQuery(this).unbind('click.destroyvideojs'); 
    }); 
}); 

它首先初始化視頻並將其銷燬。

但是,當我想使用相同的確切代碼段重新初始化它時,它不起作用。它不會在相同的元素ID上初始化腳本(當它從DOM中刪除,並在添加完成後通過正確的初始化調用再次添加)。我想知道爲什麼會發生這種情況?

闖闖今天:

var the_id = 'my_id'; 
var player = _V_(the_id, {}, function(){   
    player.destroy(); 
    _V_(the_id, {}, function(){ 
     alert('reinit'); 
    }); 
}); 

所以,VideoJS的重新初始化根本不起作用。此外,它現在從視頻中刪除了控件。

+0

我有同樣的問題 – dinodsaurus 2013-02-27 17:21:40

回答

0

看起來player在回調執行時尚未定義。 看看這個js小提琴http://jsfiddle.net/gaboesquivel/BA8Pm/

destroy();適合我。這個功能如何看起來像

destroy: function() { 
      this.stopTrackingProgress(); 
      this.stopTrackingCurrentTime(); 
      _V_.players[this.id] = null; 
      delete _V_.players[this.id]; 
      this.tech.destroy(); 
      this.el.parentNode.removeChild(this.el) 
     } 

檢查該解決方案也 http://help.videojs.com/discussions/problems/861-how-to-destroy-a-video-js-object#comment_13544514

0

我把我的一些野兔從我的頭,很難找到應對脫穎而出這樣的問題...... 因此,這裏是我的解決辦法,使用JQuery ......解決方案是從如何銷燬未初始化的播放器對象這一問題誕生的,你們最終拯救我的一天,因爲我們只能銷燬顯示的播放器,即使我清理HTML並動態重新初始化playerJs閃回後退對於未顯示的未被破壞的媒體播放器將不起作用。 所以這裏是解決方案:

$.each(_V_.players, function (key, player) { 
    if (player.isReady) { player.destroy(); } 
    else { delete _V_.players[player.id]; } 
}); 

有點混亂,但會做得很好。 歡呼!

20

在這種情況下,任何人幫助,它看起來像它的dispose版本4:

var player = videojs('my-video'); 
player.dispose(); 
+0

謝謝!我花了一段時間才找到解決這個問題的辦法。 – Soska 2013-07-09 20:26:27

+2

dispose()方法似乎從標記中刪除視頻元素!如何在不刪除標記中的視頻元素的情況下刪除視頻-js播放器(因此它仍然可以通過瀏覽器的默認HTML5播放器播放)。 – smohadjer 2014-02-20 12:15:23

+0

這對我有用,因爲我在較舊版本的播放器上獲得更好的IE8支持。舊版本使用destroy(),最新版本使用dispose(),但不確定內部差異是什麼。 – danjah 2014-07-04 02:07:18

0

的API參考你所尋找的是.dispose();但它不會刪除dom中的設置。如果您擁有第三方插件,則在處理運行後,其他項目可能會丟棄您的DOM。要運行處置和清理你的DOM使用這樣的代碼

`dispose = function() { 
if (settings.debug) { 
    console.info('place.videojs_element.dispose()'); 
} /*Target the Player Element*/ 
var player = videojs(settings.element.id + '_player'); /*Pause Video*/ 
player.pause(); /*Wait for third party scripts to stop listening!!! <-- Important*/ 
setTimeout(function() { /*Dispose of the player*/ 
    player.dispose(); 
    /*I have a new video element waiting to be placed (this code is proprietary)*/ 
    var epi = new EPI(); 
    epi.place.videojs_element(settings, data); /*Wait time 600ms*/ 
}, 600); /*Destroy the old video element <--- Important */ 
$('#' + settings.element.id).empty(); 

}`

見行動工作示例:http://codepen.io/JaminQuimby/pen/yNaOwz/

上述會給你一個乾淨的DOM,並徹底清除視頻播放器。

5

查看了Video.js 5.0.0的源代碼。 @l:17236您可以執行以下操作:

if(videojs.getPlayers()[id]) { 
    delete videojs.getPlayers()[id]; 
} 
+0

我的絕對英雄! – 2017-04-21 14:57:47