单击

时间:2017-05-10 15:06:38

标签: javascript html5 canvas

我最近一直在玩HTML5画布,我想做的其中一件事就是创建一个带有画布的简单页面,无论你在哪里点击都会画一个圆圈。我有一些代码看起来应该可以工作,而且我一直尝试使用某些控制台输出进行调试,但我目前还没有看到任何错误。

我虽然使用Codepen,所以我不确定该控制台的功能是多少,而且我很遗憾不能在我的笔记本电脑上使用开发控制台(锁定学校Chromebook)

有人可以看看吗?我将代码放在这里并删除指向笔的链接。谢谢!

HTML:

<canvas id="canvas" onclick="drawCircle(event)"></canvas>

CSS:

canvas {
  position: relative;
  background: #f1c40f;
  width: 100%;
  height: 100%;
}

JS:

var c = document.getElementById("canvas");
var ctx = c.getContext("2d");

function drawCircle(e) {
  var pos = getCursorPosition(c, e);
  var clickX = pos.x;
  var clickY = pos.y;

  ctx.fillStyle = "#2980b9";
  ctx.beginPath();
  ctx.arc(clickX, clickY, 10, 0, 2 * Math.PI);
  ctx.fill();

  console.log(clickX, clickY);
  console.log("drawcircle");
}

function getCursorPosition(canvas, e) {
  // Gets click position
  rect = canvas.getBoundingClientRect();

  console.log('getcursorpos');

  return {
    x: e.clientX - rect.left, 
    y: e.clientY - rect.top
  };
}

Codepen链接:https://codepen.io/wolverine1621/pen/gWvjgx

感谢任何帮助。它可能非常简单,但这是我第一次使用canvas,所以任何输入都很有帮助!

谢谢!

2 个答案:

答案 0 :(得分:3)

问题出现了,因为您使用 css 设置了画布的widthheight

你应该使用javascript来设置它,就像这样......

c.width = window.innerWidth;
c.height = window.innerHeight;

并使画布具有弹性,以便保持其尺寸,使用......

window.onresize = function() {
  c.width = window.innerWidth;
  c.height = window.innerHeight;
}

以下是 working codepen

答案 1 :(得分:2)

有几件事:

1)你没有为画布设置宽度和高度,所以会出现失真,x / y值会很奇怪。解决方案:将画布的宽度和高度设置为窗口高度和宽度

2)确定clickX和clickY的方法过于复杂。解决方案:使用event.clientX和event.clientY

获取上下文后,设置宽度和高度:

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

注意:我还建议您删除CSS中正文上的边距

 body { margin: 0 }

现在你可以摆脱getCursorPosition(因为它给你错误的值)

var clickX = e.clientX
var clickY = e.clientY