3 Stimmen

Ändern des stroke-Attributs für ein einzelnes RaphaelJS-Objekt, wenn sich mehrere Objekte auf der Seite befinden

Ich habe eine Menge Rechtecke auf meiner Leinwand.

Ich möchte den Strich ändern, auf welchem Rechteck der Benutzer klickt, sowie einige andere JavaScript-Funktionen ausführen. Mein vereinfachter Code ist unten aufgeführt.

var canvas = Raphael("test");
var st = canvas.set();

for (var i = 0; i < 2; i++) {
   var act = canvas.rect(///edited for brevity////).attr({"stroke":"none"});
   st.push(act)

   act.node.onclick = function() {
      st.attr({stroke: "none"});
      act.attr({stroke: "yellow"});
   }   
}

Im Moment ändert sich beim Klicken auf ein Rechteck nur der Strich des zuletzt gezeichneten Rechtecks.

Irgendwelche Ideen?

3voto

Dmitry Baranovskiy Punkte 1200

Kein Raphaël-Problem, sondern eher ein Mangel an Verständnis für Closure. Kann leicht durch Selbstaufruf-Funktion behoben werden:

for (var i = 0; i < 2; i++) {
    var act = canvas.rect(///edited for brevity////).attr({"stroke":"none"});
    st.push(act)

    (function (act) {
       act.node.onclick = function() {
           st.attr({stroke: "none"});
           act.attr({stroke: "yellow"});
       }
    })(act);   
}

0voto

Chasbeen Punkte 1466

//Probieren Sie es aus und dann verfeinern Sie es

st[i].click(function (e) 
{ 
    this.attr({stroke: "gelb"});

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X