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] 您正在使用转换来缩放您的克隆。变换出现在 Raphael 2.0 中,但您的小提琴使用的是 raphael 1.5.2。可能您只是设置不正确,但我想我会指出来。

解决您的特定问题非常简单。您只需要保留对您创建的克隆的引用。每次单击某个对象时,请检查引用是否指向对象。如果是,则使用 .remove() 将其删除。这样,您将在创建新克隆之前对旧克隆进行核对。

如果您真的被卡住了,请回复,我会给您我创建的小提琴的工作版本。还是先试试吧。

N。

PS。firebug 和 webdeveloper 是您应该使用的两个浏览器扩展,如果您还没有这样做的话。它消除了很多错误的猜测。


既然你问得很好,这是你修改过的小提琴。我添加了一个名为 cloneHolder 的变量。每当您单击时,您都会检查 cloneHolder 是否引用了任何内容,如果是,则使用 cloneHolder.remove() 将其删除。如果您愿意,您可以更改代码以使您的克隆消失,然后再将其删除。

于 2012-05-24T21:47:32.663 回答