Я следил за этим руководством по MDN:
И мне было интересно, как мы можем контролировать движение мяча с помощью события движения мыши.
Я видел, что mousemove работает с текстовым полем и некоторыми входами:
https://developer.mozilla.org/en-US/docs/Web/Events/mousemove
Я подумал, что если бы мы могли поместить текстовое поле за холст, мы могли бы обнаружить событие, получить положение мыши и позволить пользователю изменять движение мяча с помощью движения мыши.
Я прочитал:
Динамическое изменение ширины и высоты текстового поля для размещения текста
Итак, я попробовал:
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Juego</title>
<style>
* {
padding: 0;
margin: 0;
}
canvas {
background: #eee;
display: block;
margin: 0 auto;
}
</style>
</head>
<body>
<textarea name = "ta" id = "ta" cols = "30" rows = "10"></textarea>
<canvas id = "myCanvas" width = "480" height = "320"></canvas>
<script>
const textarea = document.getElementById('ta');
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
textarea.style.height = canvas.height;
textarea.style.width = canvas.width;
let x = canvas.width / 2;
let y = canvas.height - 30;
const dx = 2;
const dy = -2;
let drawBall = function () {
ctx.beginPath();
ctx.arc(x, y, 10, 0, Math.PI * 2);
ctx.fillStyle = "#0095DD";
ctx.fill();
ctx.closePath();
};
function draw(e) {
console.info(e);
ctx.clearRect(0,0,canvas.width,canvas.height);
drawBall();
x += dx;
y += dy;
}
setInterval(draw, 10);
canvas.addEventListener('mousemove', draw);
</script>
</body>
</html>
Ожидаемый результат будет заключаться в том, чтобы текстовое поле использовало ширину и высоту холста и находилось позади него; однако он меньше и помещен вверху слева:
Спасибо за помощь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вам не нужен textarea для захвата события, и это будет сложно, потому что canvas будет сверху, а textarea никогда не узнает, что мышь движется поверх него, и чтобы мяч двигался с помощью мыши, вы должны передать x и y мыши на draw();, пока он перемещается.
вот рабочий пример: https://jsfiddle.net/vqdyLx5u/22/
let canvas = document.getElementById('myCanvas');
let ctx = canvas.getContext('2d');
function drawBall(x, y) {
ctx.beginPath();
ctx.arc(x, y, 10, 0, Math.PI * 2);
ctx.fillStyle = "#0095DD";
ctx.fill();
ctx.closePath();
}
function draw(x, y) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawBall(x, y);
}
draw(canvas.height / 2 , canvas.width / 2); // initial draw
canvas.addEventListener('mousemove', function(e) {
draw(e.pageX, e.pageY); // the coordinates of the mouse
});* {
padding: 0;
margin: 0;
}
canvas {
background: #eee;
display: block;
margin: 0 auto;
}<canvas id = "myCanvas" width = "480" height = "320"></canvas>