我不知道爲什麼會這樣。我甚至嘗試使用onmousedown
事件捕獲onstart
之前的座標,甚至沒有工作。 Raphael提供的不同方法使用getBBox()
,直接訪問x
和y
來獲得座標並沒有幫助。
所以我認爲是,我們應該手動維護和跟蹤座標。因此,我使用您的original_x
和original_y
變量來捕獲<path>
的位置,然後創建並設置一些變換值。下面是代碼相同
這裏是工作fiddle。
this.raph = R.path(svgPath).attr({
stroke: "hsb(0, 1, 1)",
fill: "#fff",
opacity: 1.0,
cx: 100,
cy: 900
}).transform("t" + x + "," + y);
this.raph.original_x = x;
this.raph.original_y = y;
//comment the lines in start method which captures original_x and original_y
//this.original_x = Raphael.parseTransformString(this.attr("transform"))[0][1];
//this.original_y = Raphael.parseTransformString(this.attr("transform"))[0][2];
關於跟蹤座標更多信息:
我們將有一個更加座標說updated_x
和updated_y
,將在move
方法來更新。 onFinish/onUp方法,我們可以檢查是否應該更新新位置。在這裏,它只是詢問是否應該更新新職位,並根據我們的意見,確定最終結果。
入住此fiddle:
this.start = function() {
if (this.reference.static) return;
//this.original_x = Raphael.parseTransformString(this.attr("transform"))[0][1];
//this.original_y = Raphael.parseTransformString(this.attr("transform"))[0][2];
this.animate({r: 70, opacity: 0.25}, 500, ">");
this.updated_x = this.original_x;
this.updated_y = this.original_y;
};
this.move = function(dx, dy) {
//var ts = Raphael.parseTransformString(this.attr("transform"));
this.updated_x = this.original_x + dx;
this.updated_y = this.original_y + dy;
//ts[0][1] = this.original_x + dx;
//ts[0][2] = this.original_y + dy;
this.attr({transform: 't' + this.updated_x + ',' + this.updated_y});
};
this.up = function() {
if(confirm("Shall I update the new position??")) {
this.original_x = this.updated_x;
this.original_y = this.updated_y;
}
var transformString = "t" + this.original_x + "," + this.original_y;
this.attr("transform", transformString);
this.attr({fill: "#fff"});
this.animate({r: 50, opacity: 1}, 500, ">");
};
您可以創建樣品的jsfiddle這並分享? – rajuGT
是的,這裏是一個簡化版本,沒有碰撞測試,它仍然重現了這個錯誤:https://jsfiddle.net/6ozsfdaf/ – 1nterference