2013-02-11 9 views
9

Su VideoJS website affermi che il sostegno è stato spostato a StackOverflow, quindi cerchiamo di provare qui. Ho il seguente codice:VideoJS - non sono in grado di distruggere e inizializzare

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

Inizializza il video all'inizio e lo distrugge.

Ma quando voglio inizializzare di nuovo utilizzando lo stesso pezzo esatto di codice, non funziona. Non inizializza lo script sullo stesso ID elemento (quando è stato rimosso dal DOM e aggiunto di nuovo con una chiamata di inizializzazione corretta dopo che è stato aggiunto). Mi chiedo perché questo potrebbe accadere?

Un'altra prova di oggi:

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

Così, ri-inizializzazione del VideoJS semplicemente non funziona. Inoltre, ha rimosso i controlli dal video ora.

+0

Ho lo stesso problema – dinodsaurus

risposta

0

Sembra che player non è stato definito quando il callback esegue. Date un'occhiata a questo js violino http://jsfiddle.net/gaboesquivel/BA8Pm/

destroy(); lavori per me. questo modo la funzione sembra

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) 
     } 

controllo questa soluzione troppo http://help.videojs.com/discussions/problems/861-how-to-destroy-a-video-js-object#comment_13544514

0

ho tirato alcune delle mie lepri dalla mia testa, molto difficile da trovare risposta ribalta queste domande ... Quindi ecco la mia soluzione , con JQuery ... la soluzione è nata dalla domanda su come distruggere gli oggetti giocatore non inizializzati, voi ragazzi salvate la mia giornata alla fine, così possiamo distruggere solo i giocatori che vengono mostrati, e anche se pulisco l'HTML e reinizializza dinamicamente i player il flashback non funzionerà con lettori multimediali non distrutti non mostrati. ecco la soluzione:

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

un po 'disordinato, ma farà bene. evviva!

20

Nel caso in cui questo aiuta chiunque, sembra che sia dispose nella versione 4:

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

Grazie! Mi ci è voluto un po 'per trovare la soluzione a questo problema. – Soska

+2

Il metodo dispose() sembra rimuovere l'elemento video dal markup! Come si può rimuovere il riproduttore video-js senza rimuovere l'elemento video dal markup (quindi può ancora essere riprodotto tramite il player HTML5 predefinito del browser). – smohadjer

+0

questo ha funzionato per me dato che sono su una versione precedente del lettore per un supporto IE8 migliore. la versione precedente usa destroy(), la versione più recente usa dispose(), ma non è sicuro di quali siano le differenze interne. – danjah

0

Il riferimento all'API vostro cercando .Dispose(); tuttavia non rimuove le impostazioni dal dom. Se disponi di plug-in di terze parti, altri elementi potrebbero sporcare il tuo DOM dopo lo smaltimento. Per eseguire smaltire e ripulire il vostro dom utilizzare un codice come questo

`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(); 

} `

Vedi un esempio di lavoro in azione: http://codepen.io/JaminQuimby/pen/yNaOwz/

È possibile che questo vi darà un DOM pulita e rimuovere completamente la lettore video.

5

Dopo aver esaminato il codice sorgente per Video.js 5.0.0. @l: 17236 Hai appena possibile effettuare le seguenti:

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

Il mio eroe assoluto! –

Problemi correlati