11

VideoJSのWebサイトで、サポートがStackOverflowに移動したと述べているので、ここで試してみましょう。私は次のコードを持っています:

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の再初期化は単に機能しません。さらに、ビデオからコントロールを削除しました。

4

5 に答える 5

26

これが誰かに役立つ場合、それはdisposeバージョン 4 にあるようです:

var player = videojs('my-video');
player.dispose();
于 2013-06-09T23:27:18.400 に答える
8

Video.js 5.0.0 のソースを見た。@l:17236 次のことを実行できます。

if(videojs.getPlayers()[id]) {
    delete videojs.getPlayers()[id];
}
于 2015-09-30T20:18:05.430 に答える
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

于 2013-02-27T21:29:53.620 に答える
0

私は私の頭から私のうさぎの一部を取り出しました。そのような質問に対する回答を見つけるのは非常に困難です.JQueryを使用した私の解決策は次のとおりです.解決策は、初期化されていないプレーヤーオブジェクトをどのように破壊するかという質問から生まれました。最終的には、cos 表示されているプレーヤーのみを破棄できます。HTML をクリーンアップして playerJ を動的に再初期化しても、表示されていない破棄されていないメディア プレーヤーではフラッシュ フォールバックは機能しません。だからここに解決策があります:

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

少し面倒ですが、うまくいきます。乾杯!

于 2013-05-07T12:05:04.713 に答える
0

探している API リファレンスは .dispose(); です。ただし、dom から設定は削除されません。サードパーティのプラグインを使用している場合、dispose の実行後に他のアイテムが DOM に散らばる可能性があります。dispose を実行して 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 が得られ、ビデオ プレーヤーが完全に削除されます。

于 2015-09-11T13:38:02.373 に答える