我会很感激,如果有人可以告诉我这个代码是如何工作 - 我觉得我撞我的头撞在墙上了这一点:无法理解此JavaScript代码来绘制HTML画布?
- 如何初始化铅笔对象的工作?铅笔不是一个函数 - 它如何像一个类一样被初始化?
- 在铅笔功能中,“this”是指什么?
- 在铅笔功能中,为什么我需要一个单独的“工具”变量?我尝试删除它,并用“this”替换它,但是发生的事情是canvas不再听mouseup - 你点击画布,即使你的鼠标上升,它也会继续绘制。
- ev._x和ev._y从哪里来?这是画布对象的一部分吗?有我可以参考的文件吗?
- ev_canvas函数中的“layerX”和“offsetX”究竟是什么?
- 你能帮我理解最后几行吗?我不知道他们的意思,我也没有看到JS这样写。
谢谢!
var func = tool[ev.type];
if (func) {
func(ev);
}
谢谢!
// Initialize variables
var canvas = document.getElementById('imageView');
var context = canvas.getContext('2d');
var tool = new pencil();
function init() {
// Add listeners
canvas.addEventListener('mousedown', ev_canvas);
canvas.addEventListener('mousemove', ev_canvas);
canvas.addEventListener('mouseup', ev_canvas);
}
// Pencil tool
function pencil() {
var tool = this;
this.started = false;
// Mousedown
this.mousedown = function (ev) {
context.beginPath();
context.moveTo(ev._x, ev._y);
tool.started = true;
};
// Mousemove
this.mousemove = function (ev) {
if (tool.started) {
context.lineTo(ev._x, ev._y);
context.stroke();
}
};
// Mouseup
this.mouseup = function (ev) {
if (tool.started) {
tool.mousemove(ev);
tool.started = false;
}
};
}
// Determines mouse position relative to canvas
function ev_canvas (ev) {
// if (ev.layerX || ev.layerY == 0) { // Firefox
// ev._x = ev.layerX;
// ev._y = ev.layerY;
// } else
if (ev.offsetX || ev.offsetX == 0) { // Opera
ev._x = ev.offsetX;
ev._y = ev.offsetY;
}
// Call the event handler of the tool.
var func = tool[ev.type];
if (func) {
func(ev);
}
}
init();
您确实需要一次专注于一件事情。你在这里有6个不同的问题,你应该这样对待他们。大部分内容归结为“了解JavaScript OO的基础知识”和“阅读您尝试使用的API的文档”。 – Quentin
这太宽泛了。堆栈溢出用于提出可以用合理的单词回答的问题。 – Anonymous