FairyTalesss 2023-02-27 10:00 采纳率: 78.6%
浏览 29
已结题

Html Canvas点击绘制图片的问题

需求是点击按钮在canvas上绘制指定图片,图片路径与html文件位置相同。使用onload时可正常加载,但使用click时无效。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">
</head>
<body>
    <canvas></canvas>
    <div class="button_container">
        <button><img src="./1.png">Add Dog 1</button>
    </div>
</body>
<script>
    let canva = document.querySelector("canvas");
    let context = canva.getContext("2d");
    let buttons = document.querySelector(".button_container").querySelectorAll("button");

    class image{
        constructor(path,xpos,ypos,height,width){
            this.path=path;
            this.xpos=xpos;
            this.ypos=ypos;
            this.height=height;
            this.width=width;
        }
    }

    let image1 = new image('1.png',10,50,100,100);

    buttons[0].addEventListener("click",draw(context,image1.path,image1.xpos,image1.ypos,image1.height,image1.width));

    function draw(context,path,xpos,ypos,height,width){
        let img = document.createElement('img');
        img.src=path;
        /*img.onload=function(){
            context.drawImage(img,xpos,ypos,height,width);
        }*/
        context.drawImage(img,xpos,ypos,height,width);
    }
</script>
</html>

请问导致问题的原因是什么?应当如何修改?

  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-02-27 10:16
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    问题的原因是 buttons[0].addEventListener("click",draw(context,image1.path,image1.xpos,image1.ypos,image1.height,image1.width)); 这一行代码中的 draw 函数实际上被立即执行了,而不是在按钮点击时被调用。这是因为传递给 addEventListener 的第二个参数应该是一个函数,而不是一个函数调用的结果。

    要解决这个问题,可以将该行代码改为以下形式:

    buttons[0].addEventListener("click", function() {
      draw(context,image1.path,image1.xpos,image1.ypos,image1.height,image1.width);
    });
    
    
    

    这样,draw 函数就不会在代码加载时立即执行,而是在按钮点击时才被调用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图