2011-08-02 8 views
1

私はRahael.jsライブラリを使用しています。Raphael.js:私の場合、パスの片側をドラッグする方法は?

私はパスしている場合:

var mypath = paper.path("M10 10L90 90"); 

私はマウスドラッグ パスラインの片側には、パスラインの他の側は、元 位置しばらく続けるという特徴を実装したいと思いますがドラッグされた側はマウスで移動します。それは ドラッグアンドピン機能のようなものです。それを実装する方法は?

raphael drag()関数を使用して のパス属性を更新する方法がわかりません。

var start = function() { 

}, 
move = function (dx, dy) { 
    //How to update the attribute of one side of the path here 
}, 
up = function() { 

}; 
mypath.drag(move, start, up); 

答えて

1

透明RECT要素とパスの端をマスクし、現在のxからの座標をアニメート、翻訳xにY、四角形要素のY位置とのMouseMoveに同時にパスを更新し続けます。あなたは、「ハンドル」という要素がドラッグ可能にすると、あなたのラインのパスを更新のような役割を果たし第二の要素必要

+0

は不完全ブリュットに見える –

+0

ああ、それはアイディアです。必要ならば必要なコードを提供することができますが、OPはまだ答えていません。 –

7

:あなたのソリューション

var paper = Raphael('canvas', 300, 300); 
var path = paper.path("M10 10L90 90"); 
var pathArray = path.attr("path"); 
handle = paper.circle(90,90,5).attr({ 
    fill: "black", 
    cursor: "pointer", 
    "stroke-width": 10, 
    stroke: "transparent" 
}); 

var start = function() { 
    this.cx = this.attr("cx"), 
    this.cy = this.attr("cy"); 
}, 
move = function (dx, dy) { 
    var X = this.cx + dx, 
     Y = this.cy + dy; 
    this.attr({cx: X, cy: Y}); 
    pathArray[1][1] = X; 
    pathArray[1][2] = Y; 
    path.attr({path: pathArray}); 
}, 
up = function() { 
    this.dx = this.dy = 0; 
}; 

handle.drag(move, start, up); 

http://jsfiddle.net/TfE2X/

+0

これは私が話していたものです。 @Duopixelはrect要素の代わりに円を使用しています。 +1 :) –

+0

私はjsonデータをループし、jsonデータの各要素に対応するパスと円を作成している状況があります。円の下のパスにドラッグするとどうやってアクセスできますか?私は、円の下のパスが "path" + "circleNameValue"のidに設定されている命名規則を設定しました。私はいくつかのDOMスクリプティングトリックを試しましたが、うまく動作しないようです –

+0

上記の例の 'code'へのリンク:http://stackoverflow.com/questions/9625286/making-one-side-of-a-path -draggable-in-raphael-2-0 –

関連する問題