在 HTML 中拖放Adobe AIR 1.0 以及更新的版本 若要拖曳資料進出 HTML 型應用程式 (或是進出由 HTMLLoader 所顯示的 HTML),您可以使用 HTML 拖放事件。HTML 拖放 API 可讓您拖曳項目進出 HTML 內容中的 DOM 元素。 備註: 您也可以對含有 HTML 內容的 HTMLLoader 物件,透過偵聽其事件的方式來使用 AIR NativeDragEvent 和 NativeDragManager API。不過,HTML API 與 HTML DOM 之間的整合更加完善,讓您能夠控制預設的行為。
預設的拖放行為HTML 環境針對涉及文字、影像和 URL 的拖放手勢提供了預設的行為。使用預設的行為,您隨時都能將這些類型的資料從元素中拖曳出來。不過,您只能將文字拖曳到元素中,而且僅限於頁面上可編輯區域內的元素。當您在頁面的可編輯區域之間或內部拖曳文字時,預設的行為便是執行移動動作。如果您從不可編輯的區域或應用程式外部將文字拖曳到可編輯區域,預設的行為則是執行複製動作。 您可藉由自行處理拖放事件以便覆寫預設的行為。若要取消預設的行為,必須對發生拖放事件時所傳送的物件呼叫 preventDefault() 方法。接著,您即可將資料插入至放下目標,並視需要從拖曳來源移除資料,藉以執行所選的動作。 根據預設,使用者能夠選取並拖曳任何文字,以及拖曳影像和連結。您可以使用 WebKit CSS 屬性 -webkit-user-select 來控制任何 HTML 元素可供選取的方式。例如,當 -webkit-user-select 設定為 none 時,元素內容即為無法選取的狀態,因此也就無法拖曳。您也可以使用 CSS 屬性 -webkit-user-drag 來控制能否拖曳一整個元素。不過,元素的內容視為各自獨立。使用者仍可拖曳已選取的部分文字。如需詳細資訊,請參閱:AIR 中的 CSS。 HTML 中的拖放事件拖曳動作的起源初始程式元素會傳送下列事件:
拖曳目標會傳送下列事件:
基於回應上述事件而傳送的事件物件與滑鼠事件非常相似。您可以使用滑鼠事件屬性如 (clientX, clientY) 和 (screenX, screenY) 來判斷滑鼠位置。 拖曳事件物件最重要的屬性莫過於 dataTransfer,其中包含了所拖曳的資料。dataTransfer 物件本身具有下列屬性和方法:
HTML 拖放的 MIME 類型與 HTML 拖放事件的 dataTransfer 物件搭配使用的 MIME 類型包括:
您也可以使用其它的 MIME 字串,包括應用程式定義的字串在內。不過,其它應用程式可能無法辨識或使用以這類格式傳輸的資料。您必須負責將預期的格式資料加入 dataTransfer 物件中。 重要事項: 唯有執行於應用程式安全執行程序內的程式碼才能存取放下的檔案。在非應用程式安全執行程序內,嘗試讀取或設定 File 物件的任何屬性都將產生安全性錯誤。如需詳細資訊,請參閱在非應用程式的 HTML 安全執行程序內處理檔案放下。
HTML 中的拖曳效果拖曳手勢的初始程式可以在 dragstart 事件的處理常式中設定 dataTransfer.effectAllowed 屬性,藉此限制所允許的拖曳效果。可用的字串值如下所示:
拖曳手勢的目標可以設定 dataTransfer.dropEffect 屬性,指出將在使用者完成放下動作時採取何種動作。如果放下效果屬於任何一種允許的動作,系統就會顯示相應的複製、移動或連結游標形狀。否則,系統將顯示「不適用」游標形狀。如果該目標並未設定任何放下效果,使用者即可利用輔助按鍵從各種允許的效果中選擇。 請一併在 dragover 和 dragenter 事件的處理常式中設定 dropEffect 值: function doDragStart(event) { event.dataTransfer.setData("text/plain","Text to drag"); event.dataTransfer.effectAllowed = "copyMove"; } function doDragOver(event) { event.dataTransfer.dropEffect = "copy"; } function doDragEnter(event) { event.dataTransfer.dropEffect = "copy"; } 備註: 儘管只有 dragenter 的處理常式始終需要設定 dropEffect 屬性,但要留意的是,接著發生的 dragover 事件會將這個屬性重設為預設值。因此,回應這兩種事件時都該設定 dropEffect。
|
|