javascript - Canvas 仅每隔一次点击更新一次

标签 javascript canvas action

我试图通过 JavaScript 将图像绘制到 Canvas 对象中,并在单击该图像时动态更改另一个图像的源。当我调用以下 JavaScript 图像时:

function clicked(i){    
switch(i){
    case(1): 
    source = document.getElementById("edit_pic").src = "images/1.png";  
    break;
    case(2) : 
    source = document.getElementById("edit_pic").src = "images/2.png";
    break;
    case(3) : 
    source = document.getElementById("edit_pic").src = "images/3.png";
    break;
    case(4) : 
    source = document.getElementById("edit_pic").src = "images/4.png";
    break;
    case(5) : 
    source = document.getElementById("edit_pic").src = "images/5.png";
    break;
    }
updateCanvas();
}


function updateCanvas(){
var c=document.getElementById("edit_canvas");
var ctx=c.getContext("2d");
img = document.getElementById("edit_pic");
ctx.drawImage(img,0,0);
}

每当单击 5 个图像之一时,“edit_pic”图像都会按预期更新,但是“edit_canvas”仅在您单击同一图像两次时才会绘制图片。任何帮助表示赞赏。

最佳答案

这可能是因为当您在单击的函数末尾执行 updateCanvas 函数时,图像仍在加载。您需要在图像上实现 onload 回调并从那里执行 updateCanvas 函数。换句话说......你需要对此进行异步:

function clicked(i){
   var img = document.getElementById('edit_pic');
   img.onload = function(){ updateCanvas(img); };
   img.src = 'images/'+ i +'.png';
} 

function updateCanvas(img){
   var c = document.getElementById("edit_canvas"),
       ctx = c.getContext("2d");

   ctx.drawImage(img,0,0);
}

关于javascript - Canvas 仅每隔一次点击更新一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831946/

相关文章:

javascript - 如何设置 X 属性以使用 Electron 创建桌面状态栏?

javascript - 检查应用了哪些样式表的方法

java - 具有 HTML 命名操作和助记符的 JButton

c#-4.0 - FakeItEasy 的第一步和 Action 类型的问题

java - 操作表单中使用的数据类型

javascript - 使用 Javascript 根据键值转换 JSON

java - 如何在不离开jsp的情况下从servlet返回消息?

javascript - 更有效地发送 Canvas 内容

javascript - 空 Canvas toDataURL() 变黑

javascript - 颜色变化时 Canvas 形状上出现锯齿状边缘