2016-12-07 5 views
0

私は2つの剣道ソート可能なリストを持っています。すべてが良く見えますが、私はこの奇妙な行動を経験しました。 2回目を斜め上向きに(北東)ドラッグすると、マウスを少し下に動かすまで、プレースホルダ「ここにドロップ」は表示されません。アイテムが斜め上方にドラッグされたときにKendoSortableプレースホルダが表示されない

「Strawberries」をドラッグしてから、「Pinapples」を右のリストにドラッグします。 「イチゴ」の下に達するまでカーソルが北東に移動することを覚えておいてください。

これは剣道のドラッグアンドドロップの制限ですか?

ここには私が使用しているDojoがあります。

答えて

1

だから、私は剣道のソースコードを見てはconsole.logの束(とローカルプロジェクトでコードを使用)さんと、ここで私が見つけたものです:

(興味のある方法は(_dragあります)とソート可能なクラスの_movePlaceholderは())

これは、剣道は、プレースホルダを表示するかどうかを決定する方法である(_drag内部_movePlaceholderを())()を呼び出す:

if (axisDelta.y < 0 && (moveOnDragEnter || offsetDelta.top < 0)) { 
    direction = 'prev'; 
} else if (axisDelta.y > 0 && (moveOnDragEnter || offsetDelta.top > 0)) { 
    direction = 'next'; 
} 

あなたが移動している間右側のdropzone上にカーソルを上に移動:

  • axisDelta.y -1(上に移動)され、offsetDelta.top> 0(ドロップ領域の上部の下にある)

だから、どちらの場合はtrueです。

インスタントあなたが1つのピクセルをダウンドラッグ:

  • axisDelta.y 1(あなたが下に移動している)でありoffsetDelta.top> 0
(依然としてドロップエリアのトップ以下)

direction = 'next';に入ると、方向が設定されているので、_movePlaceholder()が呼び出され、「次の」スポット(最後の項目の下)に「ここにドロップ」が表示されます。

ドロップ領域の上部からドラッグすると、direction = 'prev';というケースに当たって、「ここにドロップする」が「前」の場所(最初の項目の上)に表示されます。

moveOnDragEnter変数は、offsetDeltaチェックを無効にするために、あなたのソート可能なのinitにtrueに設定することができますが、あなたがそれを設定した場合、それはドロップエリアに入るとすぐに表示されるように、「ここにドロップ」が発生します文書化されていないオプションのようですしかし、上にドラッグするとリストの一番上に表示され、下にドラッグするとリストの一番下に表示されます。これはあなたが望むものではありません。

Whew!

だから、現在のロジックでは上向きにドラッグする方法がなく、リストの一番下に「Drop Here」が表示され、ソート可能な制限があります。

あなたが好きなのであれば、ソースコードを編集してロジックにケースを追加して、より多くの条件の組み合わせをチェックすることができます。e:

if (I'm anywhere in the drop area) { 
    figure out if the cursor position is above the first item or below the last item and set direction accordingly so that _movePlaceholder() will get called 
} 

...または制限を受け入れてください。

関連する問題