11

VideoJS 网站上,您声明支持已移至 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 fiddle 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......这个解决方案诞生于如何销毁未初始化的玩家对象的问题,你们拯救我的最后一天,因为我们只能销毁已显示的播放器,即使我清理 HTML 并动态重新初始化 playerJs,flash 后退也不适用于未显示的未销毁的媒体播放器。所以这是解决方案:

$.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 回答