0

メソッドを介して再生中のビデオからフレームカウントを返す必要があるプロジェクトに取り組んでいvideo.prototype.getCurrentFrame()ます。私のスクリプトは、このメソッドによって返される数値が「未定義」であることを除けば、ほとんど問題なく動作します。私の問題は変数のスコープで何かをしなければならないことを知っていますが、私はjavascriptが初めてで、自分で動作させることができないようです...

私の方法では、フレームと呼ばれる変数を更新するフレームvideo.prototype.setUpPlayerカウントをカウントできる関数があります。'timeListener'このフレーム変数にアクセスしようとすると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());
        }   
}

よろしくお願いいたします。

4

1 に答える 1

2

プロトタイプ自体ではなく、getCurrentFrameのインスタンスから呼び出す必要があります。Video

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

プロトタイプを使用して現在のフレームを取得できる唯一の方法は、次を使用することですapply()(これにはインスタンスも必要です)。

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

編集:timeListenerビデオのインスタンスのコンテキストでコールバックが実行されていないようです。コールバックを正しいスコープに明示的にバインドする必要がある場合があります。

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

var video = new Video;

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

thistimeListener閉鎖中は今videoです。

于 2012-07-04T11:08:32.687 に答える