javascript - 使用 Javascript 收集鼠标在 Canvas 上的位置

标签 javascript canvas rotation

有没有一种简单的方法可以在不使用 jquery 旋转某些东西的情况下收集屏幕上的鼠标指针。我在屏幕上有一个带有 ARM 的人物,希望它们沿着缪斯指针的方向旋转。例如,我将如何做如下所示的事情

if (mosue_moved_up) {
digit = 1;
} else if (mouse_moved_down) {
digit = 2;
} else if (mouse_moved_right) {
digit =3;
} else if (mouse_moved_left) {
digit = 4;
}

最佳答案

您可以像这样获取鼠标和肩膀之间的 Angular :

var dx = mouseX - shoulderX;
var dy = mouseY - shoulderY;
var angle=Math.atan2(dy,dx);

您可以像这样从肩膀到鼠标获取 ARM 端点:

var endX = shoulderX + armlength * Math.cos(angle);
var endY = shoulderY + armlength * Math.sin(angle);

这里是示例代码和演示:

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var BB=canvas.getBoundingClientRect();
var offsetX=BB.left;
var offsetY=BB.top;
ctx.lineCap='round';
ctx.fillStyle='blue';
ctx.strokeStyle='green';
ctx.lineWidth=8;

var PI=Math.PI;
var cx=150;
var cy=150;
var armlength=65;

canvas.onmousemove=handleMousemove;

draw(0,0);

function handleMousemove(e){
  e.preventDefault();
  e.stopPropagation();
  var mouseX=e.clientX-offsetX;
  var mouseY=e.clientY-offsetY;
  draw(mouseX,mouseY);
}

function draw(mouseX,mouseY){
  var dx=mouseX-cx;
  var dy=mouseY-cy;
  var angle=Math.atan2(dy,dx);
  var x=cx+armlength*Math.cos(angle);
  var y=cy+armlength*Math.sin(angle);

  ctx.clearRect(0,0,cw,ch);

  ctx.fillRect(cx-15,cy-10,30,100);

  ctx.beginPath();
  ctx.moveTo(cx,cy);
  ctx.lineTo(x,y);
  ctx.strokeStyle='green';
  ctx.stroke();

}
body{ background-color: ivory; }
canvas{border:1px solid red;}
<h4>"Arm" will move as the mouse moves.</h4>
<canvas id="canvas" width=300 height=300></canvas>

关于javascript - 使用 Javascript 收集鼠标在 Canvas 上的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691046/

相关文章:

JavaScript : gauge image effect

javascript - 加速 Ajax 成功 DOM 操作

javascript - 访问网格中的不同复选框

javascript - 在 Three.js 中旋转一个对象本身并围绕另一个中心对象

javascript - 使 div 适合内容的大小而不重叠文本?

javascript - 如何创建两个变量的变量

html - 带有 Bootstrap 的响应式 Canvas

python - 如何在 Tkinter 中对小部件进行分层(在图像前面制作形状)?

swift - ARKit 无法在垂直平面上正确旋转 SCNNode

c# - 为什么Unity3D中相机绕z轴旋转?