q1: возможно ли иметь невидимый прямоугольник?
Действительно, это так!
ctx.fillStyle = 'rgba(255,255,255,0)';
ctx.fillRect(50,50,50,20);
Хотя это работает, и это немного более кратким:
;
q2: можно вызвать метод по методу?
Предположительно вы могли бы сделать что-то вроде этого:
//Naive generic chainer function
//returns this even if the default
//value is significant!
function chain(obj) {
function F() {}
F.prototype = obj;
var cobj = new F();
for (var i in obj) {
if (typeof obj[i] == 'function') {
//Function Bind-ish
cobj[i] = (function() {
var method = i;
return function() {
this.constructor.prototype[method].apply(this, arguments);
return this;
};
}());
}
}
return cobj;
}
var chained = chain(ctx);
chained.fillRect(0,0,200,200)
.fillRect(100,100,200,200)
.fillRect(400,400,100,100)
.fillText("I CAN HAS INVISDIBLE??", 250, 250);
Но зачем, когда вы можете сделать это:
with (ctx) {
fillRect(100,100,200,200);
fillRect(300,300,100,100);
fillStyle = 'green'; //I CAN SEE
fillText("SCREW BEST PRACTICES");
}
ну, мне нужна возможность переместить блок текста на холст в другое место того же холста, и есть несколько блоков текстов (скажем, 20). И кажется, что было бы легче перемещать прямоугольник внутри холста и блок текста, следовательно, вопросы. PLS см. следующий поток для «большой» цели вопроса, спасибо. http://stackoverflow.com/questions/3313918/how-to-use-mouse-event-instead-of-keycode-for-html5-canvas-and-jquery –
Вы не можете перемещать что-либо в холсте, изменять только пиксели. Если вам нужно отслеживать, где вам нужно сделать это отдельно или использовать библиотеку, которая сделает это за вас. – pr1001
svg, svg, спасибо. –