由於Canvas是一個被動元素,因爲在你放置的像素不知道它們是什麼時,你需要自己預定一切。
爲此,您可以創建保存重要信息(如區域和顏色)的對象。
例如(有無數的方法來使這些,但爲了簡單起見):
// ctx = context
function myObject(ctx, x, y, w, h, color) {
this.render = function() {
ctx.fillStyle = color;
ctx.fillRect(x, y, w, h);
}
this.setColor = function(newColor) {
color = newColor;
this.render();
}
this.setPosition = function(newX, newY) {
x = newX;
y = newY;
this.render();
}
//... etc. ...
}
現在,您可以創建一個數組,或堆棧,讓您的對象:
var stack = [];
當你按下按鈕:
var w = 50, h = 50, i = 0;
for(;i < 10; i++) {
var o = myObject(ctx, i * w - 2, 0, w, h);
stack.push(o);
o.render();
}
當您需要更新對象只需調用其setColor
功能:
//n = index, use a for-loop to update a range (group)
stack[n].setColor(newColor);
如果需要組,那麼你可以堆疊起來,因爲這:
var group = [];
填充如上組,則:
stack.push(group);
(和你做的命中測試通過在需要ax和y位置的對象上實現一個方法並與對象的位置和寬度/高度進行比較,也是如此。對於內存效率,你可能想要prototype
的一些方法(如果他們不需要訪問內部變量等等)。
希望有所幫助。
來源
2013-06-28 10:18:54
K3N
HTML5畫布是一個繪圖元素,一旦繪製完成,您就無法與其中的特定元素進行交互。但是,您仍然可以重繪整個畫布。另一方面,SVG可以讓你與特定元素進行交互。一個好的圖書館是raphaelJS:http://raphaeljs.com/ –