다음 코드는 작동 onchange를 이벤트를 작동하지 않습니다.자바 스크립트 캔버스
나는 onchange 이벤트를 사용하여 내 함수를 래핑하고 Checkbox가 선택되어 있는지 확인해야합니다.
하지만 왜 이것이 위의 2 줄에서 작동하지 않는지 이해할 수 없습니다. Chrome 개발자 콘솔에 아무런 오류가 표시되지 않습니다.
다시 위의 두 줄을 제거하면 코드가 작동하지만 추가하면 그 이유가 이해되지 않습니다.
전체 코드 : 그 마우스 이벤트 리스너 콜백 함수가 캔버스에 추가하는 시간으로 초기화되지 않고, 때문에
if(window.addEventListener) {
window.addEventListener('load', function() {
...
// Initialization sequence.
function init() {
canvas = document.getElementById('imageView');
tool = new tool_pencil();
canvas.addEventListener('mousedown', ev_canvas, false);
canvas.addEventListener('mousemove', ev_canvas, false);
canvas.addEventListener('mouseup', ev_canvas, false);
}
function tool_pencil() {
var tool = this;
this.started = false;
checkboxPencil.onchange = function() {
if(checkboxPencil.checked) {
console.log("Pencil checked");
this.mousedown = function (ev) {
context.beginPath();
context.moveTo(ev._x, ev._y);
tool.started = true;
};
this.mousemove = function (ev) {
if (tool.started) {
context.lineTo(ev._x, ev._y);
context.stroke();
}
};
this.mouseup = function (ev) {
if (tool.started) {
tool.mousemove(ev);
tool.started = false;
}
};
} else {
console.log("Pencil not checked");
}
}
}
아름다운 덕분에 많이이'창로드 = 초기화 선호합니까 라인 추가,'대신을 이 경우 : if (window.addEventListener) { window.addEventListener ('load', function() { '예'인 경우 왜? :) – Micheasl
@Micheasl 그래도, 무슨 일이 일어나고 있는지 명확히해라.), 나는'addEventListener'를 선호한다. 더 자세한 설명은 [here] (http://stackoverflow.com/a/6348533/7750640)를 참조하십시오 :) –