2013-02-11 36 views
9

Trên VideoJS website bạn cho biết rằng hỗ trợ đã được chuyển sang StackOverflow, vì vậy hãy thử nó tại đây. Tôi có mã sau:VideoJS - không thể hủy và khởi tạo

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

Khởi tạo video lúc đầu và phá hủy video.

Nhưng khi tôi muốn khởi tạo lại nó bằng cách sử dụng cùng một đoạn mã chính xác, nó không hoạt động. Nó không khởi tạo tập lệnh trên cùng một ID phần tử (khi nó đã bị xóa khỏi DOM và được thêm lại với lệnh gọi khởi tạo chính xác sau khi nó được thêm vào). Tôi tự hỏi tại sao điều này có thể xảy ra?

thử Một hôm nay:

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

Như vậy, tái khởi của VideoJS chỉ đơn giản không hoạt động. Hơn nữa, nó đã loại bỏ các điều khiển từ video ngay bây giờ.

+0

Tôi có cùng sự cố – dinodsaurus

Trả lời

0

Dường như player chưa được xác định khi cuộc gọi lại thực thi. Hãy xem js này fiddle http://jsfiddle.net/gaboesquivel/BA8Pm/

destroy(); làm việc cho tôi. này như thế nào chức năng trông như

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

kiểm tra giải pháp này quá http://help.videojs.com/discussions/problems/861-how-to-destroy-a-video-js-object#comment_13544514

0

Tôi kéo một số thỏ tôi từ người đứng đầu của tôi, rất khó để tìm câu trả lời fore câu hỏi như vậy ... Vì vậy, đây là giải pháp tôi , với JQuery ... giải pháp được sinh ra từ câu hỏi làm thế nào để tiêu diệt các đối tượng người chơi chưa được khởi tạo, các bạn lưu ngày của tôi cuối cùng, cos Chúng ta có thể phá hủy chỉ những người chơi được hiển thị, và thậm chí nếu tôi xóa HTML và reinitialise player playerJ đèn flash rơi trở lại sẽ không hoạt động đối với trình phát media không bị phá hủy. vì vậy, đây là giải pháp:

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

một chút lộn xộn nhưng sẽ làm tốt. cổ vũ!

20

Ở trường hợp này giúp bất cứ ai, có vẻ như đó là dispose trong phiên bản 4:

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

Cảm ơn! Tôi mất một lúc để tìm ra giải pháp cho vấn đề này. – Soska

+2

phương thức vứt bỏ() dường như xóa phần tử video khỏi đánh dấu! Làm cách nào để xóa trình phát video-js mà không xóa phần tử video khỏi đánh dấu (vì vậy nó vẫn có thể được phát qua trình phát HTML5 mặc định của trình duyệt). – smohadjer

+0

tính năng này hoạt động với tôi vì tôi đang sử dụng phiên bản cũ hơn của trình phát để hỗ trợ IE8 tốt hơn. phiên bản cũ hơn sử dụng destroy(), phiên bản mới nhất sử dụng vứt bỏ(), nhưng không chắc chắn những khác biệt nội bộ là gì. – danjah

0

Các api tham khảo bạn đang tìm kiếm là .dispose(); tuy nhiên nó không loại bỏ các thiết lập từ dom. Nếu bạn có các plugin của bên thứ ba, các mục khác có thể phân tán DOM của bạn sau khi xử lý xong. Để chạy vứt bỏ và dọn dẹp dom của bạn sử dụng một mã như thế này

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

} `

Xem một ví dụ làm việc trong hành động: http://codepen.io/JaminQuimby/pen/yNaOwz/

trên sẽ cung cấp cho bạn một DOM sạch và hoàn toàn loại bỏ các trình phát video.

5

Đã xem xét nguồn cho Video.js 5.0.0. @l: 17236 Bạn chỉ có thể thực hiện các thao tác sau:

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

Anh hùng tuyệt đối của tôi! –

Các vấn đề liên quan