2012-10-22 124 views
0

我目前正在試驗HTML5拖放API。現在我有幾個問題:HTML5拖放多個不同的拖放目標,dropEffect,多選等

1. 我說得對嗎,是不可能將可拖動元素與拖放區域連接起來?

示例:您有兩種不同的要拖放的元素:文件和文本標籤。現在,如果我給DragOver-Handler和Drop-Handler一個div,它將對文件和文本標籤都做出響應。我正在尋找一種簡單的可能性,只對特定類型的可拖動項目做出響應。

一個連接的問題是dropEffect光標樣式:此刻,我啓用DragStart處理程序中的所有可能的放置目標,並在DragEnd處理程序中禁用所有它們(使用「disable」我的意思是說,所有DragOver和Drop-Handlers)。如果我不這樣做,它會看起來像是你可以將文件放在只對文本標籤作出反應的元素上。

2. dropEffect光標風格是一團糟。在Firefox中,我根本沒有得到它們,在Chrome中,它會給我一個大的「加號」圖標(即使我已經從元素中刪除了DragOver和DropHandlers)

3. Last feature我期待的是多選:選擇多個文本標籤,然後一次拖動它們。這可能嗎?我的第一個想法是創建一個新的div並將所有選定的元素移入此div,然後拖動新創建的div。看起來很hackish,看起來相當醜陋;-)

我希望你們對我有一些答案。謝謝!

回答

1

我不認爲HTML5拖放(和朋友)應該替代常用的「拖放」Javascript庫(儘管在某些情況下可以使用它們而不是它們)。這個名字是誤導性的。

現代操作系統包括允許跨應用程序通信的API:剪貼板和拖放操作。這兩種API都十分相似,需要相當的水平低是因爲特殊的挑戰:

  • 的數據必須跨進程發送的,所以它必須以某種方式序列化,
  • 發送者必須具有的一種方式方法提供多種格式的數據(例如text/plain和text/html),並且接收者可以選擇最喜歡的數據,發送者和接收者可能生活在不同的進程中,因此他們永遠無法找到(它們甚至可能是來自不同平臺,GUI框架,編程語言等的實體),唯一的通信通道是數據本身,

當前的HTML5 APIS與其說--JQueryUI可拖動 - 並不意味着讓程序員嚴格控制拖動過程的外觀和感覺,而是與本地系統範圍的機制緊密集成。這可能是也可能不是程序員需要的。

爲了回答這些問題:

  1. 你不能「連接與落區可拖動的元素」,因爲你可拖動的元素甚至可以從瀏覽器外面進來。但是您可以製作一個拒絕某些類型數據的區域(這是用戶期望的本地拖放)。
  2. 「div」和「multiselect」並不是操作系統可以理解的東西(我們沒有原生多片腳本或多文本選擇)。如果你使用可切換的內部div(例如,通過點擊按住shift鍵),你可以實現這樣的功能。當有人試圖拖動外部潛水時,創建一個傳送對象,說明選擇了哪個內部div(甚至可以創建一個顯示它們的圖像)。

如果上述解決方案聽起來有點低級,那麼 - 那是因爲它們是。當您開發桌面遊戲或工具時,您不需要依靠本地拖放來移動棋盤上的棋子或在GUI中移動滑塊。我認爲這與JavaScript相同。 JQueryUI Draggables不會去任何地方。