簡體   English   中英

斜向上拖動項目時,不會出現KendoSortable占位符

[英]KendoSortable placeholder does not appear when item is dragged diagonally upwards

我有兩個劍道可排序列表,其中我可以從左到右拖動多選項目。 一切看起來不錯,但我經歷了這種奇怪的行為。 第二次我對角向上拖動(向東北),直到將鼠標向下一點移動,占位符“ Drop here”才會出現。

開始將“草莓”,然后“菠蘿”拖到右側列表。 請記住,光標應向東北移動,直到到達“草莓”下方

這是劍道拖放的限制嗎?

這是我正在使用的Dojo

因此,我查看了kendo源代碼,並在本地項目中使用了一堆console.log()的代碼,這就是我發現的結果:

(感興趣的方法是Sortable類的_drag()和_movePlaceholder())

這是kendo決定是否在_drag()內部顯示占位符(調用_movePlaceholder())的方式:

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

當您將光標向上移到右側放置區時:

  • axisDelta.y為-1(向上移動)且offsetDelta.top> 0(您位於放置區域的頂部下方)

因此,兩種情況都不成立。

您向下拖動1個像素的瞬間:

  • axisDelta.y為1(向下移動)且offsetDelta.top> 0(仍位於放置區域的頂部以下)

因此,您將陷入direction = 'next'; 和_movePlaceholder()將被調用,因為已設置方向,並且“ Drop Here”出現在“ next”位置(在最后一項下方)。

如果從放置區域的頂部拖動,則將按direction = 'prev'; 情況下,“ Drop Here”(出現在此處)出現在“ prev”位置(在第一項上方)。

moveOnDragEnter變量似乎是一個未公開的選項,您可以在可排序的init上將其設置為true,以覆蓋offsetDelta檢查BUT(如果已設置),這將導致“ Drop Here”在進入放置區域后立即出現,但它將出現如果您輸入向上拖動,則顯示在列表的頂部;如果您輸入向下拖動,它將顯示在列表的底部...這不是您想要的。

ew!

所以....不,按照當前的邏輯,沒有辦法向上拖動並使“ Drop Here”出現在列表的底部,這是可排序的限制。

現在,如果您願意,您可以編輯源代碼以向邏輯中添加更多案例,以檢查更多條件組合,即:

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
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM