Javascript无法加载图片

时间:2014-03-12 04:09:49

标签: javascript html5 image canvas

我目前熟悉HTML 5和Javascript,目前正在尝试使用Javascript加载和绘制图像到HTML 5画布。 这是HTML代码:

<html>
    <head>
        <title>Adam Leung</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width">
        <script src="js/main.js"></script>
        <link rel="stylesheet" href="css/style.css" />
    </head>
    <body>
        <h1>pegGame</h1>
        <canvas id="mainCanvas" onload="" onclick="test()" width="800" height="480"></canvas>
        <a><br>by: Adam Leung</a>
    </body>
</html>

以下是javascript代码:

function test(){
    var mainCanvas = document.getElementById("mainCanvas");
    var logoImage = new Image();
    logoImage.src = "img/gameLogo.png";
    alert(logoImage.width);
    mainCanvas.getContext("2d").drawImage(logoImage, 0, 0);
}

这是文件结构:

/Site Root
   -/css
      -style.css
   -/img
      -gameLogo.png
   -/js
      -main.js
-index.html

gameLogo.png只是一张300px乘300px的图像。我开始相信当我加载index.html并在画布内单击时,它应该打印&#34; 300&#34;在弹出窗口中将gameLogo.png绘制到画布上。当我点击画布时,弹出窗口出现&#34; 0&#34;并没有图像绘制,发生了什么? (编辑:我正在测试最新版本的Chrome)

非常感谢。

2 个答案:

答案 0 :(得分:2)

为图像添加一个onload处理程序,你应该好好去:

function test(){
    var mainCanvas = document.getElementById("mainCanvas");
    var logoImage = new Image();

    logoImage.onload = loadingDone;      // here before setting src

    logoImage.src = "img/gameLogo.png";

    function loadingDone() {             // gets called when done
        alert(logoImage.width);
        mainCanvas.getContext("2d").drawImage(logoImage, 0, 0);
    }
}

图像加载是异步的,因此您需要使用回调。如果不是,代码将继续并尝试在加载完成之前绘制图像(这将显示为空白图像)。

还使用错误回调(onerror)。

答案 1 :(得分:1)

drawImage()方法需要图像对象。在调用drawImage()之前创建一个图像并等待它加载。使用onload方法。

之类的,

  var imageObj = new Image();
  imageObj.onload = function() {
    context.drawImage(imageObj, 0, 50);
  };
  imageObj.src = '../img/gameLogo.png';