javascript - Canvas 中的鼠标坐标不起作用

标签 javascript canvas

var canvas=document.getElementById('canvas');
var ctx=canvas.getContext("2d");
var mouseX=0;
var mouseY=0;
var canvasPos=getPosition(canvas);

ctx.addEventListener("mousemove",setMousePosition,false);
function getPosition(e1) {
  var xPosition = 0;
  var yPosition = 0;

  while (e1) {
    xPosition += (e1.offsetLeft - e1.scrollLeft + e1.clientLeft);
    yPosition += (e1.offsetTop - e1.scrollTop + e1.clientTop);
    e1 = e1.offsetParent;
  }
  return { x: xPosition, y: yPosition };
}
function setMousePosition(e) {
  mouseX = e.clientX - canvasPos.x;
  mouseY = e.clientY - canvasPos.y;

  ctx.clearRect(0, 0, canvas.width, canvas.height);

  ctx.beginPath();
  ctx.arc(mouseX, mouseY, 50, 0, 2 * Math.PI, true);
  ctx.fillStyle = "#FF6A6A";
  ctx.fill();
  ctx.closePath();
}

function getPosition(e1) {
  var xPosition=0;
  var yPosition=0;
  while(e1) {
    xPosition+=(e1.offsetLeft-e1.scrollLeft+e1.clientLeft);
    yPosition+=(e1.offsetTop-e1.scrollTop+e1.clientTop);
    e1=e1.offsetParent;
  }
  return {
    x: xPosition,
    y: yPosition
  };
}
<canvas id="canvas"></canvas>

目标是让 Canvas 元素跟随鼠标移动。我的尝试粘贴在上面。我尝试检索确切的鼠标坐标并用它来重新绘制元素。我似乎没有得到任何输出,只有一 block 空白 Canvas 。任何帮助表示赞赏。

最佳答案

您有 2 个拼写错误:

  1. 变量上下文...
  2. ctx.addEventListener(...)

:ctx.addEventListener() 是不可能的,因为上下文没有事件。 Canvas 上确实有这些。

var canvas=document.getElementById('canvas');
// edit from context to ctx
var ctx=canvas.getContext("2d");
var mouseX=0;
var mouseY=0;
var canvasPos=getPosition(canvas);
// edit ctx to canvas
canvas.addEventListener("mousemove",setMousePosition,false);
function getPosition(e1) {
  var xPosition = 0;
  var yPosition = 0;

  while (e1) {
    xPosition += (e1.offsetLeft - e1.scrollLeft + e1.clientLeft);
    yPosition += (e1.offsetTop - e1.scrollTop + e1.clientTop);
    e1 = e1.offsetParent;
  }
  return { x: xPosition, y: yPosition };
}
function setMousePosition(e) {
  mouseX = e.clientX - canvasPos.x;
  mouseY = e.clientY - canvasPos.y;

  ctx.clearRect(0, 0, canvas.width, canvas.height);

  ctx.beginPath();
  ctx.arc(mouseX, mouseY, 50, 0, 2 * Math.PI, true);
  ctx.fillStyle = "#FF6A6A";
  ctx.fill();
  ctx.closePath();
}

function getPosition(e1) {
  var xPosition=0;
  var yPosition=0;
  while(e1) {
    xPosition+=(e1.offsetLeft-e1.scrollLeft+e1.clientLeft);
    yPosition+=(e1.offsetTop-e1.scrollTop+e1.clientTop);
    e1=e1.offsetParent;
  }
  return {
    x: xPosition,
    y: yPosition
  };
}
<canvas id="canvas"></canvas>

关于javascript - Canvas 中的鼠标坐标不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660283/

相关文章:

javascript - 永远不会调用 Observable.forkJoin 的订阅

javascript - react : async setState updates to late

javascript - 未捕获类型错误 : Cannot set property 'onclick' of null. 尝试了 window.onload

node.js - 错误 : CAIRO_FORMAT_RGB30 was not declared in this scope

image - 我如何使用 Canvas 绘制这个背景形状?

javascript - 从一个页面链接到另一个经典 ASP 的下拉列表中选择值

javascript - 多种格式的 jQuery 屏蔽(可选数字)

html - 通过传递参数运行 Node.js

javascript - 在标记事件后使用 jquery

javascript - .getImageData() 具有背景图像属性?