gpt4 book ai didi

javascript - HTML Canvas 通过鼠标单击绘制一个圆并拖动它,直到获得所需的半径

转载 作者:行者123 更新时间:2023-11-28 11:02:30 31 4
gpt4 key购买 nike

我是 Canvas 新手,我正在摆弄它。

我想通过鼠标点击画一个圆,圆的半径应该由鼠标拖动决定(类似于在windows中画图画圆)

我尝试过创建一个圆圈,但是却意外地这样做了我的代码

<html>

<head>

</head>

<body style="margin:0">
<canvas id="canvas" width="500" height="500" style="border:1px solid"></canvas>

<script>

var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
var radius=50;

var putPoint = function(e){
context.beginPath();
context.arc(e.clientX, e.clientY, radius, 0, Math.PI*2);
context.fill();
}
canvas.addEventListener('mousedown',putPoint);

</script>
</body>

</html>

我在 plunker 中的代码 http://plnkr.co/edit/DPa9km1hHAAsCBCbnGvB?p=preview

如果有人帮助我,我会很高兴

提前致谢

最佳答案

一般的想法是,你必须取两个点,圆心所在的点(这是用户按下鼠标的位置),以及当前点,即鼠标移动的位置

两点之间的距离就是半径,由毕达哥拉斯定理给出 h^2 = c^2 + c^2 因此:

  • onmousedown 将该点保存为中心
  • omousemove 计算到中心的距离并用作半径
  • omouseup 停止操作/动画

这里是一些示例代码,根据您的需要进行修改

<html>

<head>

</head>

<body style="margin:0">
<canvas id="canvas" width="500" height="500" style="border:1px solid"></canvas>

<script>

var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
var radius=50;
var nStartX = 0;
var nStartY = 0;
var bIsDrawing = false;
var putPoint = function(e){
nStartX = e.clientX;nStartY = e.clientY;
bIsDrawing = true;
radius = 0;
}
var drawPoint = function(e){
if(!bIsDrawing)
return;
var nDeltaX = nStartX - e.clientX;
var nDeltaY = nStartY - e.clientY;
radius = Math.sqrt(nDeltaX * nDeltaX + nDeltaY * nDeltaY)
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.arc(nStartX, nStartY, radius, 0, Math.PI*2);
context.fill();
}
var stopPoint = function(e){
bIsDrawing = false;
}
canvas.addEventListener('mousedown',putPoint);
canvas.addEventListener('mousemove',drawPoint);
canvas.addEventListener('mouseup',stopPoint);

</script>
</body>

</html>

关于javascript - HTML Canvas 通过鼠标单击绘制一个圆并拖动它,直到获得所需的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811677/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com