#javascript #html #css #canvas #bulma
#javascript #HTML #css #холст #bulma
Вопрос:
итак, вот код, я получил его, чтобы регистрировать положение мыши и заполнять его. все, что мне сейчас нужно, это заполнить прямоугольник в положении щелчка мыши. может кто-нибудь сказать мне, как я это исправлю?
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
const scale = 8;
const width = 785;
const height = 585;
context.fillStyle = "black";
canvas.width = width;
canvas.height = height;
context.scale(scale, scale);
context.fillRect(50, 50, 1, 1);
canvas.addEventListener("mousedown", fillc, false);
function fillc(event) {
let canvasElem = document.querySelector("canvas");
canvasElem.addEventListener("mousedown", getMousePosition(canvas, event));
function getMousePosition(canvas, event) {
context.fillStyle = "black";
let rect = canvas.getBoundingClientRect();
let x = Math.floor(event.clientX - rect.left);
let y = Math.floor(event.clientY - rect.top);
console.log("Coordinate x: " x, "Coordinate y: " y);
console.log("ok");
context.fillRect(x, y, 1, 1);
}
}
Комментарии:
1. есть комментарии? о том, как я могу это исправить? я новичок в js soo
2. если мой ответ помог вам, было бы неплохо получить обратную связь 🙂
Ответ №1:
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
const scale = 8;
const width = 785;
const height = 585;
context.fillStyle = "black";
canvas.width = width;
canvas.height = height;
context.scale(scale, scale);
context.fillRect(50, 50, 1, 1);
canvas.addEventListener("mousedown", fillc, false);
function fillc(event) {
let canvasElem = document.querySelector("canvas");
canvasElem.addEventListener("mousedown", getMousePosition(canvas, event));
function getMousePosition(canvas, event) {
context.fillStyle = "black";
let rect = canvas.getBoundingClientRect();
let x = Math.floor(event.clientX - rect.left) / scale;
let y = Math.floor(event.clientY - rect.top) / scale;
console.log("Coordinate x: " x, "Coordinate y: " y);
console.log("ok");
context.fillRect(x, y, 1, 1);
}
}
поскольку вы определили масштаб, вам нужно разделить ваши координаты на ваш масштаб, чтобы соответствовать вашему положению 🙂
вы также можете проверить здесь: https://jsfiddle.net/pt0vxrda /
Комментарии:
1. это сработало, также я могу удалить масштаб, если я правильно закодирую значения?
2. масштаб определяет, сколько пикселей используется для отображения точки 1×1 на холсте. если вы удалите его, это будет просто 1×1 px … в настоящее время это 8×8 px. Вам не нужно масштабировать контекст ^^
3. @ilimango Если это сработало, щелкните стрелку в ответе, чтобы ответчик получил за это некоторую репутацию / кредит, это также помечает вопрос как ответ