2012-10-19 20 views
5

私はRaphael JS 2.0を使用していますが、別の要素のドラッグの終了をシミュレートし、処理中の現在の要素を削除したいと考えています。 jqueryを使用してそれを行うことができれば、それも素晴らしいでしょう。このようなRaphael JSでドラッグ終了イベントをシミュレートする方法は?

何か:

var child = currentShift.data('endChild'); 
var newX = child.attr('x'); 
if (this !== currentShift) 
{ 
    newX = child.attr('x')-day; 
} 
currentShift.attr({y: child.attr('y'), x: newX, height: child.attr('height')}); 
$(currentShift.node).mouseup(); 
child.remove(); 

子要素がドラッグの「移動」の部分でthisあるので、私はエラーを取得します。しかし、それはcurrentShiftと対話するために使用されています。

他にも同様の効果が得られるいくつかの方法がありますが、任意の要素のドラッグ終了を模倣する方法があるかどうかを知りたいと思います。

+0

'var child = currentShift.data().endChild;' .... –

+0

@eicto私はあなたが示唆しているものを実際に得ていません。 'child'要素が適切に設定されています。私が本当に不思議に思うのは、 '$(currentShift.node).mouseup();'です。この行は実際にその要素の終了ドラッグイベントを呼び出さないか、少なくとも私が望むようにcurrentShift要素を解放するのではなく、エラーを返します。 – keyneom

答えて

1

あなたはcall()は自分のラファエルJS要素に(私の場合currentShiftで)参照を渡すと(私の場合upで)あなたのドラッグ終了関数への参照を使用することができますように見えます。私のコードは次のようになります。

var child = currentShift.data('endChild'); 
var newX = child.attr('x'); 
if (this!==currentShift) 
{ 
    newX = child.attr('x')-day; 
} 
currentShift.attr({y: child.attr('y'), x: newX, height: child.attr('height')}); 
if (this !== currentShift) 
    up.call(child); 
else 
    up.call(currentShift); 
child.remove(); 

これはまだ、ユーザーがマウスダウンを保持し続ける場合、私は、以来たい正確に何をやっていない、それは要素がされた後でも、私のドラッグ移動機能を呼び出そうとし(つまり、実際にドラッグイベントを強制的に停止させるわけではありません。単にmoveイベントを呼び出してから、move関数を呼び出そうとすると要素がなくなるため、致命的ではないエラーが多く発生します)。

ドラッグを強制的に終了させる方法については、今後数日以内に答えを出すことができます(移動機能が呼び出されることはありません)。ユーザーが引き続きマウスを押し続けても、その答えを受け入れる。さもなければ、私はこれを受け入れるだけです。

関連する問題