2016-12-07 40 views
0

我有兩個kendo可排序列表,其中我可以將多選項從左向右拖動。所有看起來不錯,但我經歷了這種奇怪的行爲。第二次,我斜着向上(東北方向)拖動,佔位符「Drop here」不會出現,直到您將鼠標向下移動一點。當物品向上斜向拖動時,不會出現KendoSortable佔位符

開始拖動「草莓」,然後「Pinapples」到右側列表。請記住,你的光標應該向北移動,直到你到達「草莓」的下方

這是劍道拖放的限制嗎?

這是我使用的Dojo

回答

1

所以,我看着劍道的源代碼,並用)一堆的console.log的(年代和這裏使用你的代碼在本地項目是我的發現:

(的利息方法_drag( )和可排序類的_movePlaceholder())

這是劍道是如何決定是否要顯示佔位符(調用_movePlaceholder())內_drag():

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(你是下面的下拉區域的頂部)

所以兩種情況都不是真實的。

即時拖動1個像素向下:

  • axisDelta.y爲1(您正在向下移動)AND offsetDelta.top> 0(靜止下方的下拉區的頂部)

因此,如果您設置了方向,並且「Drop Here」出現在「下一個」位置(最後一個項目的下方),則您將進入direction = 'next';並調用_movePlaceholder()。

如果從拖放區域的頂部拖動,您將遇到direction = 'prev';的情況,並且「拖放到此處」出現在「預先」位置(在第一項上方)。

moveOnDragEnter變量似乎是一個未公開的選項,您可以在您的可排序的初始化設置爲true來覆蓋offsetDelta檢查,但如果您設置它,它會導致「Drop Here」在進入放置區域時立即出現但它會出現在列表的頂部,如果你進入拖動,它會出現在列表的底部,如果你進入拖拽...這不是你想要的。

Whe!

所以....不,用當前的邏輯,沒有辦法拖拽向上,並讓「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 
} 

...或者只是接受限制。

相關問題