你怎么在拉斐尔做一个不可饶恕的元素?

时间:2010-10-10 23:15:42

标签: javascript drag-and-drop raphael

我使用element.drag(start, move, up);

创建了一个可拖动的元素

当我想让元素不可归档时,我可以使用 the documentation 中的方法来实现这一点:

element.undrag(f); // Any undefined variable works as the argument

这使得元素不再移动。

这种方法有两个问题:

  1. 这会使网页上的所有元素无法整理。
  2. start()仍为每个元素触发一次。我在start()中触发了不透明度更改,因此非常明显。
  3. 如何使元素不可归档,以便只影响该元素并且不会触发start()

    这是我到目前为止所拥有的。以下尝试在一次拖动后使元素不可归档:

    wiwindow.onload = function() {
        var R = Raphael("canvas", 500, 500),
        c = R.circle(100, 100, 50).attr({
            fill: "hsb(.8, 1, 1)",
            stroke: "none",
            opacity: .5
        }),
        d = R.circle(200, 200, 50).attr({
            fill: "hsb(1, 1, .8)",
            stroke: "none",
            opacity: .5
        }),        
        start = function () {
            // storing original coordinates
            this.ox = this.attr("cx");
            this.oy = this.attr("cy");
            this.attr({opacity: 1});
        },
        move = function (dx, dy) {
            // move will be called with dx and dy
            this.attr({cx: this.ox + dx, cy: this.oy + dy});
        },
        up = function () {
            // restoring state
            this.attr({opacity: .5});
            this.undrag(notDefinedVariable); // Try to make it undragable
        };
    
        c.drag(move, start, up);    
        d.drag(move, start, up);     
    };​
    

    Try it out with this jsFiddle

2 个答案:

答案 0 :(得分:3)

让它在2.0

中工作

我不得不改变

this.undrag(notDefinedVariable); // Try to make it undragable

this.undrag(); // Try to make it undragable

未定义必须包含在先前版本中,以使其1/2如上所述工作。

答案 1 :(得分:2)

这是已知的错误。将在下一个版本中修复。