Попробуйте использовать объекты.
Я создал объект для инкапсуляции объекта Raphael и функций перетаскивания, которые будут на нем использоваться.
function Button(ix,iy,ir)
{
// grab a reference to the objects "this"
var that = this;
that.a = r.circle(ix, iy, ir).attr({"fill":"red"})
// drag handler
that.start = function(x,y,event) {
that.a.ox = this.attr("cx");
that.a.oy = this.attr("cy");
that.a.animate({r: 20, opacity: .25}, 500, ">");
}
that.move = function(dx, dy) {
that.a.attr({cx: that.a.ox + dx, cy: that.a.oy + dy});
}
that.up = function () {
that.a.animate({r: 15, opacity: .5}, 500, ">");
};
that.a.drag(that.move,that.start,that.up);
return that;
}
Здесь важно захватить "this "ссылка на переменную и использование переменной для ссылки на нее в функциях перетаскивания.
Причина, по которой это делается, заключается в том, что при перетаскивании называются" move "," start "и" up ", объект thisне будет ссылаться на ваш объект.«Это» часто меняется.Используя «то», вы блокируете объект для использования в этих методах.
Вот лучшее объяснение «что = это».(Обязательно проголосуйте в один прекрасный день за отличным объяснением)
Вот скрипка , которая создает две кнопки, которые вы можете перетаскивать независимо.
Надеюсь, что поможет