onload vs onLoad(区分大小写)

Wul*_*ulf 2 javascript html5 canvas

js在网页中有2个函数()用于将图像附加到canvas元素:

 function attachImage(tile, x, y)
    {
      base_image = new Image();
      base_image.src = 'Images/tiles/'+(tile-1)+'.png';
      base_image.onload = function(){
        context.drawImage(base_image, 32*x,32*y);
      }
    }
Run Code Online (Sandbox Code Playgroud)

我将它复制并粘贴并将其复制到另一个画布上

  function attachImage2(tile2, x2, y2)
    {
        base_image2 = new Image();
        base_image2.src = 'Images/tiles/'+(tile2-1)+'.png';
        base_image2.onLoad = function(){
            context2.drawImage(base_image2, 32*x2,32*y2);
      }
    }
Run Code Online (Sandbox Code Playgroud)

在Firefox上,如果我做一个onload和另一个onLoad,那么它工作正常.但无论我对chrome做什么,它都无法正确加载图像.

编辑:这是和firefox和chrome之间的图像比较:

FIREFOX:http://imgur.com/JaEgy

CHROME:http://imgur.com/VJc6q

Gab*_*oli 5

你应该使用onload(小写).

一些一般性说明

  • 当你需要使用局部变量时var.
  • 您应该onload在实际设置之前设置,src否则可能不会调用(对于缓存的)图像onload.
  • 由于您的方法执行相同的操作,因此您应该只使用一个,并将上下文作为参数传递

所以

<script>
var canvas = document.getElementById('map');
context = canvas.getContext('2d');

var canvas2 = document.getElementById('map2');
context2 = canvas2.getContext('2d');

function attachImage(tile, x, y, canvasContext)
{
  var base_image = new Image();
  base_image.onload = function(){
    canvasContext.drawImage(base_image, 32*x,32*y);
  }
  base_image.src = 'Images/tiles/'+(tile-1)+'.png';
}
</script>
Run Code Online (Sandbox Code Playgroud)

并且您不应script为每个调用创建一个标记

<?php
echo("<script>");
for($tr = 0; $tr < count($mapArray)-1; $tr++) {
    for($tc = 0; $tc < count($mapArray[$tr])-1; $tc++) {
        $tile = $mapArray[$tr][$tc];
        echo "attachImage(" . $tile . "," . $tc . "," . $tr . ",context);";
    }
}

for($tr = 0; $tr < count($mapArrayy)-1; $tr++) {
    for($tc = 0; $tc < count($mapArrayy[$tr])-1; $tc++) {
        if($mapArrayy[$tr][$tc]!=0){
            echo "attachImage(" . $mapArrayy[$tr][$tc]. "," . $tc . "," . $tr . ",context2);";
        }
    }
}
echo("</script>");
?>
Run Code Online (Sandbox Code Playgroud)