尝试绘制从鼠标位置工具栏中选择的形状 - HTML5 CANVAS

Trying to draw shapes which are selected from toolbar at the mouse position-HTML5 CANVAS

本文关键字:CANVAS HTML5 选择 绘制 鼠标 工具栏 位置      更新时间:2023-09-26

嘿伙计们,我正在尝试创建一个交互式应用程序,用户可以在其中选择他们想要的形状,然后单击画布上的任意位置,形状就会出现在该位置。到目前为止,我只能为一种形状做到这一点。代码如下:

<!DOCTYPE html>
<html>
<head>
 <script>
 function initiateCanvasRectangle()
 {
     var ctx = document.getElementById('myCanvas').getContext('2d');
     ctx.canvas.addEventListener('mousemove', function(event) {
         var mouseX = event.clientX - ctx.canvas.offsetLeft;
         var mouseY = event.clientY - ctx.canvas.offsetTop;
     });
     ctx.canvas.addEventListener('click', function(event) {
         var mouseX = event.clientX - ctx.canvas.offsetLeft;
         var mouseY = event.clientY - ctx.canvas.offsetTop;
         ctx.fillRect(mouseX,mouseY,100,50);
    });
 }
 function initiateCanvasCircle()
 {
     var ctx = document.getElementById('myCanvas').getContext('2d');
     ctx.canvas.addEventListener('mousemove', function(event) {
         var mouseX = event.clientX - ctx.canvas.offsetLeft;
         var mouseY = event.clientY - ctx.canvas.offsetTop;
     });
     ctx.canvas.addEventListener('click', function(event) {
         var mouseX = event.clientX - ctx.canvas.offsetLeft;
         var mouseY = event.clientY - ctx.canvas.offsetTop;
         ctx.beginPath();
         ctx.arc(mouseX, mouseY, radius, 0, 2 * Math.PI, false);
         ctx.fillStyle = 'green';
         ctx.fill();
    });
 }
 function rect(){  //so that the function is triggered only when the user selects the shape
 window.addEventListener('click', function(event) {
     initiateCanvasRectangle();
 });
 }
 function drawRect()
 {
     rect();
 }
 function circle(){  //as from here the code is not working
  window.addEventListener('click', function(event) {
     initiateCanvasCircle();
 });
 }
 function drawCircle()
 {
    circle();
 }
 </script>
 <style>
 BUTTON.rect {
     padding: 8px 8px 8px 32px;
     font-family: Arial, Verdana;   
     background-color: white;
     border:2px solid black;
 }

 #tbl {
     border-collapse:collapse;
 }
 </style>
</head>
<body>
<div align="left">
<table border="1" id="tbl" width="1100" height="100">
<div align="right">
<tr><td><button class="circle" onclick="drawCircle(); return true;" style="padding:20px 40px 20px 40px;">Circle</button>
</td>
<td>
<button class="rect" onclick="drawRect(); return true;" style="padding:20px 40px 20px 40px;"></button>
</td></tr>
</div>
</table>
<p>
<canvas id="myCanvas" width="1100" height="400" style="border:solid 1px black;"></canvas>
</div>
</body>
</html>
当我单击矩形的按钮时,

它工作正常,但是当我单击其按钮时,我似乎无法绘制圆圈。我的代码有错误吗?到目前为止,我创建的内容仅用于尝试目的,因此请忽略页面的外观。任何帮助将不胜感激。谢谢。

您从不定义此行中使用的半径变量:

ctx.arc(mouseX, mouseY, radius, 0, 2 * Math.PI, false);

将其设置为某个值,例如 50,它将起作用。

演示:http://plnkr.co/edit/8eUT0hRXA40K53Dy0xDl?p=preview