Glisser-déposer et la forme de la rotation avec Raphael JS

Je suis en utilisant RaphaelJS 2.0 pour créer plusieurs formes dans un div. Chaque forme doit pouvoir être glissés et déposés dans les limites de la div, de manière indépendante. Sur double-cliquant sur une forme, cette forme doit faire pivoter de 90 degrés. Il peut alors être déplacée et a tourné de nouveau.

J'ai chargé un peu de code sur fiddler: http://jsfiddle.net/QRZMS/. C'est essentiellement ceci:

    window.onload = function () {

        var angle = 0;

        var R = Raphael("paper", "100%", "100%"),
            shape1 = R.rect(100, 100, 100, 50).attr({ fill: "red", stroke: "none" }),
            shape2 = R.rect(200, 200, 100, 50).attr({ fill: "green", stroke: "none" }),
            shape3 = R.rect(300, 300, 100, 50).attr({ fill: "blue", stroke: "none" }),
            shape4 = R.rect(400, 400, 100, 50).attr({ fill: "black", stroke: "none" });
        var start = function () {
            this.ox = this.attr("x");
            this.oy = this.attr("y");
        },
        move = function (dx, dy) {
            this.attr({ x: this.ox + dx, y: this.oy + dy });
        },
        up = function () {

        };
        R.set(shape1, shape2, shape3, shape4).drag(move, start, up).dblclick(function(){
            angle -= 90;
            shape1.stop().animate({ transform: "r" + angle }, 1000, "<>");
        });


    }

Le glisser-déposer fonctionne et est également l'une des formes tourne sur le double clic. Cependant, il y a deux problèmes/questions:

  1. Comment puis-je joindre la rotation sur chaque forme automatiquement, sans avoir à coder en dur chaque élément de référence dans la rotation de la méthode? I. e. Je veux juste dessiner les formes d'une fois, alors tous automatiquement exposés au même comportement, de sorte qu'ils peuvent être glissé/déplacé/rotation de manière indépendante, sans avoir à appliquer explicitement que le comportement de chaque forme.
  2. Après une forme a été tourné, il n'est plus fait glisser correctement - comme si la de faire glisser la souris mouvement se rapporte à l'origine de l'orientation de la forme plutôt que la mise à jour lorsque la forme est en rotation. Comment puis-je obtenir que cela fonctionne correctement, de sorte que les formes peuvent seulement être déplacé et tourné de nombreuses fois, seamlessley?

Merci beaucoup pour tous les pointeurs!

OriginalL'auteur Dan | 2011-11-13