1

だから私は6種類の記号を持つ紙を持っています。各シンボルは、円とパスのコレクションです。一部の円をクリックしてセットをドラッグできるようにしたいだけです。たとえば、シンボルに 2 つの円と 1 つのパスがある場合、円の 1 つをクリックしてセットをドラッグ アンド ドロップできるようにしたい (十分に文書化されているもの)。ユーザーが他の円をクリックしても、何も起こりません。私の Raphael 要素はユーザーによって動的に作成されるため、作成された各セットを配列にプッシュします。セット内の特定の円にアクセスして、セットの配列からクリックできるようにすることはできますか?

セットを挿入する方法は次のとおりです

{
paper.setStart();
    var circ = paper.circle(x,y,35); //first circle - should be clickable
    var conpoints = insConPoint1(paper,x,y);
    var pathright = conpoints.path;
    var conPoint1 = conpoints.conpoint; //this is a second circle - should not be clickable
var st = paper.setFinish();
symbolarray.push(st);
}

また、セットをドラッグ可能にする方法は次のとおりです

function dragger(){
    this.dx = this.dy = 0;

};

function mover(s){
    return function(dx, dy){
        (s|| this).translate(dx-this.dx, dy-this.dy);
        this.dx = dx;
        this.dy = dy;
    }
};
for(var i = 0; i<symbolcount;i++){
    symbolarray[i].drag(mover(symbolarray[i]), dragger);    
}
4

1 に答える 1

1

問題ない。あなたがそれを行うことができる2つの方法:

ドラッグ可能な円が 1 つだけの場合は、ドラッグ イベントをその円にアタッチしますが、トランスレートはセットではなくセットで呼び出しますthis(これは、ドラッグ リスナーがセット オブジェクトにアタッチされている場合でも、常に個々の要素を参照します)。 ) これは動的であるため、次のようにオブジェクトにキーと値のペアを追加.data()する Raphael の関数を使用して適切なセットを見つけることができます。

paper.setStart();
    var circ1 = paper.circle(100,100,35); //first circle - should be clickable
    var circ2 = paper.circle(50,50,25); // second circle - not clickable
var st = paper.setFinish();
st.data("myset", st);

st.click(function(e) {
   //returns the parent set
   console.log(this.data("myset")); 
});

次に、translate イベントを呼び出すだけです。ところで、translate は推奨されていないため、機会があれば transform() に適応する必要があります。this.data("myset")

セット内の複数のオブジェクトがドラッグ可能である場合は、少し異なることを行うことができます。.data()オブジェクトをドラッグしたい場合は、 true であるオブジェクトに「candrag」プロパティを追加するために使用します。次に、セットがドラッグされたときにこの値をチェックし、クリックされたオブジェクトがこの値に「true」を持っている場合にのみ、セットを変換 (別名変換) します。同様のアイデア。

于 2013-03-13T12:07:29.333 に答える