2013-02-21 35 views

回答

2

正如你已經發現,應用變換到拉斐爾對象不改變它的位置屬性。

查看transform method中的省略號語法。因爲轉換非常頭疼,所以我更喜歡在簡單情況下直接改變屬性。您只需記住使用.data()方法存儲任意數據的dragStart函數的起始位置。

var paper = Raphael(0, 0, 320, 320); 
var innerC = paper.circle(320/2, 320/2, 20); 
innerC.attr("stroke", "#000"); 
innerC.attr("fill", "#000"); 


var dragMove = function (dx, dy, x, y, e) { 
    console.log(innerC.attr('cx')); 
    this.attr("cx", this.data("ox") + dx); 
    this.attr("cy", this.data("oy") + dy); 
    this.animate({ 
     "fill-opacity": 1 
    }, 500); 
}, 
dragStart = function (x, y) { 
    this.data("ox", this.attr("cx")); 
    this.data("oy", this.attr("cy")); 
}, 

dragEnd = function() { 
    this.animate({ 
     "fill-opacity": 1 
    }, 500); 
}; 

innerC.drag(dragMove, dragStart, dragEnd); 

jsFiddle

+0

工作就像一個魅力!謝謝。 – JavaCake 2013-02-21 21:19:15

+0

如果我嘗試點擊不完全位於中間的圓圈,它往往會反彈到中心點的距離。你知道這是爲什麼發生嗎? – JavaCake 2013-02-21 22:25:43

+0

啊,是的,你應該這樣做:this.data(「ox」,this.attr(「cx」)),同樣適用於y – 2013-02-21 23:13:08