Kat*_*Man 1 javascript firefox html5 firebug
我正在学习HTML5和Javascript,我正试图在画布上绘制图像.如果我在打破下面标记的行后单步执行代码,我有以下代码绘制图像.如果我不调试那么根本不绘制图像.我究竟做错了什么?Firefox 10与FireBug 1.9.
请注意,虽然有一个循环来处理多个图像,但我只选择了一个.我想如果一个人不工作,那么一百个也不会工作.;-)
<!DOCTYPE html>
<html>
<body>
<input type="file" id="files" name="files[]" multiple />
<canvas id="picCanvas" />
<script>
function handleFileSelect(evt) {
var files = evt.target.files;
// Loop through the FileList and render images
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function (theFile) {
return function (e) {
var img = document.createElement('img'); // <-- BREAK HERE!
img.src = e.target.result;
var canvas = document.getElementById('picCanvas');
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在调用drawImage方法之前,您必须等到浏览器完全加载图像元素,即使您的图像元素是从base64字符串而不是从外部文件创建的.所以只需使用onload图像对象的事件.快速修复就像这样:
var img = document.createElement('img');
img.onload = function()
{
var canvas = document.getElementById('picCanvas');
canvas.width = this.width;
canvas.height = this.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(this, 0, 0);
}
img.src = e.target.result;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |