【发布时间】:2021-05-14 12:26:14
【问题描述】:
我正在尝试制作一个简单的 JS 画布画线程序。当有人第一次点击画布时,它应该存储它的 x 和 y 值(变量 x2 和 y2)。当有人第二次点击画布时,它应该将点击的 x 和 y 值存储在另一个变量中(变量 x1 和 y1)。我的问题是程序只存储第二次点击的值,控制台将变量记录为"undefined"。
所以总结一下,当有人点击时,x2 和y2 的值是"undefined",而它们应该是一个数字。主要目标是获取 2 个 x 和 y 值并与它们保持一致。希望有人能帮忙。
这是我试过的代码:
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="500" height="350" style="border:1px solid #d3d3d3;"></canvas><br>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var a = true;
function getMousePosition(canvas, event) {
let rect = canvas.getBoundingClientRect();
let x2;
let y2;
let x1;
let y1;
if (a) {
let x2 = event.clientX - rect.left;
let y2 = event.clientY - rect.top;
a = false;
} else {
let x1 = event.clientX - rect.left;
let y1 = event.clientY - rect.top;
a = true;
ctx.beginPath();
ctx.moveTo(x2, y2);
ctx.lineTo(x1, y1);
ctx.stroke();
ctx.closePath();
console.log("Coordinate x1: " + x1,
"Coordinate y1: " + y1);
console.log("Coordinate x2: " + x2,
"Coordinate y2: " + y2);
}
}
let canvasElem = document.querySelector("canvas");
canvasElem.addEventListener("mousedown", function(e) {
getMousePosition(canvasElem, e);
});
</script>
</body>
</html>
-JSman225
【问题讨论】:
-
每次调用
getMousePosition(),您都会定义一对新的x1/y1和x2/y2变量。并且,根据a的值,另一组x1/y1或x2/y2变量。查看var和let定义的变量的不同范围。
标签: javascript canvas scope console