Raphael JSを発見しましたが、forループで生成された要素に適用されるマウスイベントについて質問があります。
5つの長方形を出力するサンプルコードは次のとおりです。
var paper = Raphael("canvasTest",200,200);
for(var i = 0 ; i < 5 ; i++){
var rect = paper.rect((i*15)+5,10,10,10);
rect.attr("fill","blue");
rect.hover(
function(){
rect.attr("fill","red");
document.getElementById("info").innerHTML="Hovered: "+i;
},
function(){
rect.attr("fill","blue");
}
);
}
これにより、次の出力が生成されます。
問題は、5番目の長方形だけが赤くなり(別の長方形がホバーされている場合でも)、info
divは常に5番目の長方形がホバーされていることを出力することです。
this
内部関数内で使用でき、問題を部分的に解決できることがわかりました。上記のコードは正しい長方形を赤で色付けしますが、情報コンテナは5番目の長方形がホバーされていることを出力します。
rect.hover(
function(){
this.attr("color","red");
...
},
...
);
これを解決するための最もクリーンな方法は何ですか?rect
などのカスタムフィールドを設定rect.someVariable=i
し、それを内部関数で参照することを考えています。しかし、おそらくもっときれいなものがありますか?
よろしくお願いします。