Warum läuft dieser Event-Handler in RaphaelJS sofort?

  • Warum wird dieser Event-Handler in RaphaelJS (2.0.0) sofort ausgeführt und nicht, wenn Sie darauf klicken?

     function enlarge (shape) {
      shape.animate({'transform' : 's2'}, 200);
    }
    
    jQuery(function () {
      var paper = Raphael("canvas", 1000, 1000);
      var button = paper.circle(300, 50, 20);
      button.attr({'fill':'black'});
    
      var circle = paper.circle(50, 50, 20);
      circle.attr({'fill':'red'});
    
      button.mousedown(enlarge(circle));
    });  
     
    22 November 2011
    Daniel Samson
2 answers
  • Weil Sie sofort anrufen.

    Ersetzen Sie button.mousedown(enlarge(circle)); durch folgenden Code:

     button.mousedown(function() {
        enlarge(circle)
    });
     
    22 November 2011
    ThiefMasterRob M.
  • .mousedown() erwartet eine Funktionsreferenz als Argument. Stattdessen rufen Sie eine Funktion auf, und alle .mousedown() erhalten, da ihr Parameter undefined ist. Da Sie circle an enlarge() übergeben müssen, können Sie einen Verweis auf enlarge nicht direkt übergeben. Schließen Sie Ihren Anruf stattdessen in eine Funktion in enlarge() ein:

     button.mousedown(function () {
        enlarge(circle);
    });
     
    22 November 2011
    gilly3