gpt4 book ai didi

javascript - 更新原型(prototype)变量Javascript

转载 作者:行者123 更新时间:2023-12-02 19:32:34 24 4
gpt4 key购买 nike

我正在开发一个项目,我需要通过方法 video.prototype.getCurrentFrame() 从正在播放的视频返回帧计数。我的脚本工作得很好,除了此方法返回的数字是“未定义”。我知道我的问题必须与变量的范围有关,但我是 javascript 新手,我似乎无法让它自己工作......

在我的方法video.prototype.setUpPlayer中,我有一个函数可以让我计算framcount'timeListener',我可以在其中更新一个名为frame的变量;如果我尝试通过 video.prototype.getCurrentFrame() 访问此帧变量,它不会达到更新的值。

这是我到目前为止的代码:

var Video = function(aVideoId){
this.videoId = aVideoId;
this.frame;
this.videoContainer;
this.myPlayer;
this.timeListener;
this.progressListener;
};

Video.prototype.getCurrentFrame = function(){
return this.frame;
}

Video.prototype.setVideoContainer = function(){
videoContainer = $('<div>', {
id: this.videoId,
class: 'projekktor',
width: "100%",
height: "100%",
});
$('#innerContainer').html(videoContainer);
}

Video.prototype.setUpPlayer = function(){
videoId = this.videoId;


myPlayer = projekktor('#' + videoId, {
controls: "true",
volume: 0.5,
preload: false,
autoplay: true,
playlist: [{
0: {
src: '/' + videoId + '.mp4',
type: 'video/mp4'
},
1: {
src: '/' + videoId + '.mov',
type: 'video/mov'
},
2: {
src: '/' + videoId + '.ogv',
type: 'video/ogv'
}
}]
}, function() { // call back
myPlayer.addListener('time', timeListener);
myPlayer.addListener('progress', progressListener);
});

timeListener = function(duration) {
$('#currentTime').html(duration);
frame = Math.round(duration * 25);
$('#currentFrame').html(frame);
return this.frame = frame;


}

progressListener = function(value) {
$('#progress').html(Math.round(value))
$('#progress2').html(myPlayer.getLoadProgress());
}
}

预先感谢您的帮助!

最佳答案

您需要调用getCurrentFrame来自 Video 的实例,而不是原型(prototype)本身:

var video = new Video;
alert(video.getCurrentFrame());

使用原型(prototype)检索当前帧的唯一方法是使用 apply() (这也需要一个实例):

var video = new Video;
alert(Video.prototype.getCurrentFrame.apply(video));
<小时/>

编辑: 看来 timeListener回调不会在视频实例的上下文中执行。您可能必须显式地将回调绑定(bind)到正确的范围:

timeListener = function() 
{
// ...
this.frame = frame;
// ...
}

var video = new Video;

// binding the correct context
myPlayer.addListener('time', timeListener.bind(video));

thistimeListener现已关闭 video .

关于javascript - 更新原型(prototype)变量Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11327804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com