如何使用 ctx.drawImage 将数组中的随机图像推送到 canvas?

How do I push random images from an array onto a canvas using ctx.drawImage?

我想要一个 canvas 每次 window 刷​​新时随机显示不同的动物头像。因此,我试图将随机图像从我的头部阵列推送到我的 canvas。正如您在下面看到的,这是我的数组。

var heads = ['animals/dog.svg', 'animals/fish.svg', 'animals/monkey.svg'];`

这里是绘制图像函数,我希望数组将图像随机推送到:

ctx.drawImage(img, 60, 50); 

这是我的上下文代码的全部:

var heads = ['animals/dog.svg', 'animals/fish.svg', 'animals/monkey.svg'];

function gethead() { 
var number = Math.floor(Math.random()*heads.length);
document.write('<img src="'+heads[number]+'" />');}

window.onload = function () {
  var img = new Image();
  img.src = 'dog.svg';


  img.onload = function () {
      // CREATE CANVAS CONTEXT.
      var canvas = document.getElementById('canvas');
      var ctx = canvas.getContext('2d');
      ctx.drawImage(img, 60, 50); 
      // DRAW THE IMAGE TO THE CANVAS.
   }
}

任何人都可以解释一下我如何才能做到这一点吗?

创建一个 img 元素并将 src 设置为 heads[generatednumber] 并将其附加到 body。

 var img=document.createElement('img');
 img.src=heads[number];
 document.body.append(img);

使用与引用图像相同的变量img,编写一个onload回调函数

img.onload = function () { }

并在 drawImage 中 传递保存图像引用的变量,即 img

document.getElementById('canvas').getContext('2d').drawImage(img, 0,0); 

试试 运行 这个片段

var heads = ['https://cdn.pixabay.com/photo/2015/02/04/08/03/baby-623417__340.jpg', 'https://cdn.pixabay.com/photo/2018/03/11/20/42/mammals-3218028__340.jpg', 'https://cdn.pixabay.com/photo/2016/04/14/08/40/newborn-1328454__340.jpg']; 
window.onload = function () {
     let number = Math.floor(Math.random()*heads.length); 
     var img=document.createElement('img');
     img.src=heads[number];
     document.body.append(img);
      img.onload = function () {       document.getElementById('canvas').getContext('2d').drawImage(img, 0,0); 
      //remove the image after drawing
      img.style.display="none"
         
      }    
}
<canvas id="canvas"></canvas>