0
以下のコードは、灰色の背景に赤と青が交互に現れるキャンバスのツールチップに10x10色のボックスを作成することになっています。それぞれのキャンバスがキャンバス内にあるときだけマウスに反応するようにしたい。下のコードは4つの正方形の灰色のキャンバスを作成しますが、マウスが左端のキャンバスの上にあるときは、最も右側のキャンバスに色付きのボックスが表示されます。他のキャンバスは動作しません。javascriptで複数のクリックレスポンスキャンバスを作成するにはどうすればよいですか?
ここに私の2つの質問があります。
- なぜ1つのキャンバスがアクティブになっていますか?
- なぜボックスが間違ったキャンバスに表示されるのですか?
<!DOCTYPE html>
<html>
<body>
<canvas id="c0" width="201" height="201"></canvas>
<canvas id="c1" width="201" height="201"></canvas>
<canvas id="c2" width="201" height="201"></canvas>
<canvas id="c3" width="201" height="201"></canvas>
<script>
var colorno = ["#F77", "#077"];
var the = { 'c0': {}, 'c1': {}, 'c2': {}, 'c3': {} };
var box = 10;
var workings = function(name) {
instance = the[name];
instance.name = name;
canvas = instance.canvas = document.getElementById(instance.name);
instance.context = canvas.getContext("2d");
instance.index = 0;
instance.context.fillStyle = "#777";
instance.context.fillRect(0, 0, canvas.width, canvas.height);
scale = (canvas.width - box)/canvas.width;
canvas.addEventListener("click", function(e) {
instance.context.fillStyle = colorno[++instance.index&1];
instance.context.fillRect(scale*e.x-box, scale*e.y-box, box, box);
}, true);
};
for (var key in the) workings(key);
</script>
</body>
</html>
PERFECTは!あなたの説明はうまく簡潔かつ明確でした。ありがとうございました。 – jlettvin