0

クローンされた最後のパスを削除するのに問題があります。
あるパスをクリックするとそのクローンが表示され、別のパスをクリックすると、クローンされた最後のパスが消えるか、元のパスにスケールをアニメーション化して削除し、別のパスが作成されます。誰かがそれを行う方法を教えてもらえますか?

私のコード:

var paper = Raphael("paper", 1000, 1000);

var mg = {};

mg.rg1a = this.paper.path("..." ).initZoom();
mg.rg2a = this.paper.path("..." ).initZoom();
mg.rg3a = this.paper.path("..." ).initZoom();


for (var state in mg) {

mg[state].setAttr({
      fill:           "#c7c6c5",
      stroke:         "#CFCFCF",
      "stroke-width": 1
    });



   (function (st, state) {
st[0].style.cursor = "pointer";

mg[state].click(function(){

                             var temp = mg[state].clone();
           temp.animate({'transform':"s2 2"}, 500);
           temp.setAttr({
      fill:           "#FF6600",
      stroke:         "#FFFB00",
      "stroke-width": 1 });


    });



})(mg[state], state);

}
4

1 に答える 1

1

私はあなたのためにこれを解決することができますが、それが役に立つかどうかはわかりません.

問題に取り組む前に、フィドルでいくつかのエラーを修正する必要があります。

1 Raphael には setAttr() という関数がありません。attr() という関数があります

[2] 変換を使用してクローンをスケーリングしています。Transforms は Raphael 2.0 で導入されましたが、フィドルは Raphael 1.5.2 を使用しています。おそらく設定が間違っているだけだと思いますが、指摘しておこうと思います。

特定の問題を修正するのは非常に簡単です。作成したクローンへの参照を保持する必要があるだけです。何かをクリックするたびに、参照がオブジェクトを指しているかどうかを確認してください。存在する場合は、.remove() を使用して削除します。このようにして、新しいクローンを作成する直前に古いクローンを削除します。

本当に行き詰まっている場合は、返信してください。私が作成したフィドルの動作バージョンを提供します。ただし、最初に試してみてください。

N.

PS。firebug と webdeveloper は、まだ使用していない場合に使用する必要がある 2 つのブラウザー拡張機能です。多くのエラーから推測する必要がなくなります。


あなたがうまく尋ねたので、ここにあなたの修正されたフィドルがあります。cloneHolder という変数を追加しました。クリックするたびに、cloneHolder が何かを参照しているかどうかを確認し、参照している場合は、cloneHolder.remove() を使用して削除します。必要に応じて、コードを変更して、クローンを削除する前にクローンが消えるアニメーションを作成できます。

于 2012-05-24T21:47:32.663 に答える