- Почему мой e.onmouseup никогда не вызывался?
e
- это объект Event
.У него нет определенного поведения для свойства onmouseup
2. Является ли мое окончательное решение лучшим способом сделать это?
Да, но с некоторымикорректировки.Во-первых, подумайте, нужна ли вам глобальная переменная.Тот же эффект может быть достигнут без глобальной переменной, но может быть полезно сохранить ее глобальной для целей отладки.
Во-вторых, ваш неработающий код не нужен.Лучше иметь один всегда существующий прослушиватель событий, который только изменяет безвредную переменную, чем создавать новый прослушиватель событий для каждого mouseup
события.Кроме того, в вашем "требуемом" коде предыдущее событие mouseup
никогда не удаляется явно.
function on_load(e) {
var drawing = false; // <-- Always declare variables
var canvas = document.getElementById("canvas");
canvas.onmousedown = function (e) { drawing = true; };
canvas.onmousemove = function (e) {
if (drawing) {
var x = e.pageX - canvas.offsetLeft;
var y = e.pageY - canvas.offsetTop;
var context = canvas.getContext("2d");
context.strokeRect(x, y, 10, 10);
}
};
window.onmouseup = function (e) { drawing = false; };
}