我正在尝试实现FileReader API来读取音频文件,但脚本永远不会从它看起来那样。我的功能如下,问题出在reader.onload = handleReaderLoad;
行。
function setupFS(file) {
console.log('setupFS function entered.');
var reader = new FileReader();
console.log(reader);
reader.onload = handleReaderLoad;
}
function handleReaderLoad(evt) {
console.log(reader);
var audioSrc = $('.file-playlist table tr:nth-child(n+1) td:first-child');
console.log(audioSrc);
console.log(reader.readAsDataURL(file));
audioSrc.attr('data-src', reader.readAsDataURL(file));
}
在控制台中,读者会将onload事件显示为function handleReaderLoad(evt) {
次调用,但reader
,audioSrc
和reader.readAsDataURL(file)
变量从未登录控制台。
我错过了什么?
答案 0 :(得分:1)
我已经弄清楚FileReader API如何设置事件。使用FileReader的主要过程是通过创建FileReader,然后声明其任何/所有事件,如onload或onloadend事件,如下所示。该过程也可以压缩成一个主要功能。
function readFile(file) {
var audioSrc;
audioSrc = $('.file-playlist table tr:nth-child(' + n + ') td:first-child');
var progress = $('.file-playlist table tr:nth-child(' + n + ') td:last-child progress');
n++;
progress.removeAttr('value');
progress.attr('data-mod', 'true');
var reader = new FileReader();
reader.onload = (function(file) {
return function(e) {
audioSrc.attr('data-src', e.target.result);
$('.file-playlist audio source').attr('data-src', e.target.result);
progress.attr('value', '100');
console.log('onload stage finished');
};
})(file);
reader.onloadend = (function() {
audioSrc.text(file.name);
});
reader.readAsDataURL(file);
}
该函数的工作原理是创建一个FileReader,然后通过返回函数声明其onload事件,并通过读取函数末尾的数据给予读者内容,在这种情况下使用readAsDataURL()
方法