我收到错误,我没有找到任何线索,我使用videojs来控制滑块中的多个视频,在每个完成的转换中,我调用一个新的videojs实例并存储ID变量和dispose()旧的videojs。因为我有很多幻灯片(或视频),并且想要在没有活跃的性能时杀死它们。我的滑块在TweenMax下工作..我从Timline调用onStart事件中的dispose()。当调用dispose()时,我收到此错误:
未捕获的TypeError:无法读取属性' vdata1408997779453'为null
这是我的代码示例:
var $slides = [],
videos =[],
currentSlide = 0,
currentVideo = null;
$(function(){
TweenLite.to($('#header-wrap'), 1, {
left: x,
onStart: function(){
if(currentVideo) {
TweenMax.set($('.video-holder'), {autoAlpha: 0});
currentVideo.dispose();
}
},
onComplete: function() {
if(videos[slideActive].url) {
videojs('movie-video-holder-'+slideActive+'', {"autoplay": false, "preload": "auto", "controls": false, "lopp": false}, function(){
currentVideo = $vid;
[...]
});
}
}
[...]
谢谢!
答案 0 :(得分:7)
这看起来与https://github.com/videojs/video.js/pull/1481
有关一个非常讨厌的黑客(直到补丁被合并)将暂停播放器,等待错误后的帧,然后处置播放器:
player.pause();
setTimeout(function() {
player.dispose();
}, 0);
答案 1 :(得分:1)
我能解决这个问题的唯一方法是覆盖videojs原型方法trackCurrentTime
,添加对this.player().el()
的检查,因为它们有一些issues related to this { {3}}
vjs.MediaTechController.prototype.trackCurrentTime = function() {
if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }
this.currentTimeInterval = setInterval(vjs.bind(this, function(){
if(this.player().el() != null)
this.player().trigger('timeupdate');
else
clearInterval(this.currentTimeInterval);
}), 250);
};
问题出现在你暂停然后手动播放播放器并在播放时丢弃它。之后,间隔currentTimeInterval
永远不会停止。
我打赌他们正在努力修复它,因为问题得到了证实。同时尝试这个修复