Une question commune, mais j'ai toujours besoin d'aide. J'essaie d'obtenir et de stocker les coordonnées de la souris lorsqu'un utilisateur clique sur le canevas.
mon HTML
<canvas id="puppyCanvas" width="500" height="500" style="border:2px solid black" onclick = "storeGuess(event)"></canvas>
et mon javascript
//setup canvas
var canvasSetup = document.getElementById("puppyCanvas");
var ctx = canvasSetup.getContext("2d");
guessX = 0;//stores user's click on canvas
guessY = 0;//stores user's click on canvas
function storeGuess(event){
var x = event.clientX - ctx.canvas.offsetLeft;
var y = event.clientY - ctx.canvas.offsetTop;
/*guessX = x;
guessY = y;*/
console.log("x coords:" + x + ", y coords" + y);
J'ai lu des tas de forums, w3schools et vidéos à ce sujet. Je suis sur le point de comprendre, mais il me manque quelque chose. Je peux obtenir les coordonnées de la page si je supprime les fichiers ctx.canvas.offsetLeft et ctx.canvas.offsetTop. Mais je dois les intégrer d'une manière ou d'une autre pour obtenir les coordonnées du canevas, puis les stocker dans les variables supposeX et supposeY.
Vous pouvez y parvenir en utilisant le offsetX
et offsetY
propriété de MouseEvent
//setup canvas
var canvasSetup = document.getElementById("puppyCanvas");
var ctx = canvasSetup.getContext("2d");
guessX = 0; //stores user's click on canvas
guessY = 0; //stores user's click on canvas
function storeGuess(event) {
var x = event.offsetX;
var y = event.offsetY;
guessX = x;
guessY = y;
console.log("x coords: " + guessX + ", y coords: " + guessY);
}
<canvas id="puppyCanvas" width="500" height="500" style="border:2px solid black" onclick="storeGuess(event)"></canvas>
J'utilise ce morceau de code.
var myCanvas = document.querySelector('#canvas');
myCanvas.addEventListener('click', function(event) {
var rect = myCanvas.getBoundingClientRect();
var x = event.clientX - rect.left;
var y = event.clientY - rect.top;
console.log("x: " + x + " y: " + y);
}, false);
<canvas width="400" height="400" id="canvas" style="background-color: lightblue"></canvas>