var images;
function preloadTrial(actor, event) {
return new Promise(function(res) {
var i = 0;
images = [];
var handler = function(resolve, reject) {
var img = new Image;
var source = '/static/videos/' + actor + '/' + event + '/' + i + '.png';
img.onload = function() {
i++;
resolve(img);
}
img.onerror = function() {
reject()
}
img.src = source;
}
var _catch = function() { res(images) }
var operate = function(value) {
if (value) images.push(value);
new Promise(handler).then(operate).catch(_catch);
}
operate();
})
}
function playSequence(time){
var delta = (time - currentTime)/1000;
currentFrame += (delta * FPS);
var frameNum = Math.floor(currentFrame);
if (frameNum >= numFramesPlay) {
currentFrame = frameNum = 0;
return;
}else{
requestAnimationFrame(playSequence);
currentImage.src = images[frameNum];
currentTime = time;
console.log("display"+currentImage.src);
}
};
function rightNow() {
if (window['performance'] && window['performance']['now']) {
return window['performance']['now']();
} else {
return +(new Date());
}
};
currentImage = document.getElementById("instructionImage");
// Then use like this
preloadTrial('examples', 'ex1').then(function(value) {
playSequence(currentTime=rightNow());
});
番号が付けられた.pngファイルでディレクトリが完全に読み込まれると想定されるJavascript関数を記述しました。ただし、あらかじめディレクトリ内の項目数はわかりません。だから私はソースが私にエラーを与えるまで画像を保存し続ける関数を作った。しかし、私がコードを実行すると、プログラムは.onloadと.onerror関数にも入っていないので、無限ループになります。JavaScript onloadとonerrorが呼び出されていない
編集:これは私の現在のコードです。画像が正しく割り当てられ、アレイ画像にプッシュされるように見えます。しかし、imgタグ(currentImage.src)にロードしてplaySequenceを実行しようとすると、表示されません。
私は '/ static'がルート('/')ディレクトリに' static'というフォルダを見つけようとしていると思います。どのようなファイル構造が設定されていますか?それを '。/ static'や' static'に変更することは何ですか? –
@J。陳いい、それは問題ではない。これはforループで動作します。しばらく使っているのは、画像の数が分からないからです。 –
'on 'を取り除く。それは、スクリプトではなくHTML用です。 –