2013-02-11 4 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'); 
    }); 
}); 

Сначала он инициализирует видео, и он уничтожает его.

Но когда я хочу снова инициализировать его, используя тот же самый кусок кода, он не работает. Он не инициализирует сценарий в том же идентификаторе элемента (когда он был удален из DOM и снова добавлен с правильным вызовом инициализации после его добавления). Мне интересно, почему это может произойти?

Другая попытка сегодня:

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

Таким образом, повторная инициализация VideoJS просто не работает. Кроме того, теперь он удаляет элементы управления из видео.

+0

У меня такая же проблема – dinodsaurus

ответ

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

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

+2

Метод dispose(), кажется, удаляет элемент видео из разметки! Как удалить плеер видео-js без удаления видеоэлемента из разметки (так что он все равно может воспроизводиться через браузер HTML5 по умолчанию). – smohadjer

+0

это работало для меня, поскольку я на старой версии проигрывателя для лучшей поддержки IE8. более старая версия использует destroy(), самая новая версия использует dispose(), но не уверен, что такое внутренние различия. – danjah

0

АНИ Ссылаясь на Вашу ищет является .dispose(); однако он не удаляет настройки из 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

Мой абсолютный герой! –

Смежные вопросы