返回部落格

使用純原生 JavaScript 建立拖放元素

使用純原生 JavaScript 建立拖放元素

JavaScript 是其中一種最受歡迎的程式語言,擁有超過 24 個框架和約 84 個函式庫。它是唯一被所有瀏覽器原生支援的程式語言。此外,該語言支援動態型別,非常適合用於渲染和動畫。您可以利用 JavaScript 在前端添加互動行為、控制後端、建立網頁和行動應用程式等。為任何網站添加效果並使其可自訂的選項,使該語言成為全球開發者的最愛。

在本指南中,我們將 引導您完成使用純原生 JavaScript (Vanilla JavaScript) 建立拖放元素的步驟。此外,我們將更進一步,使用 HTML Drag and Drop API 事件處理常式建立一個「晨間排程器」應用程式。

先決條件

若要跟隨本教學,您必須具備:

  • JavaScript 基礎知識。
  • HTMLCSS 有所了解將會是一大優勢。

步驟 1:建立新專案

首先建立一個包含兩個子元素的容器。我們將使用第一個子元素進行拖曳,並使用第二個子元素來儲存拖曳的元素。

注意: 在本教學中,我們將把容器視為存放所有拖曳元素的倉庫。簡單來說,從第一個子元素拖曳的所有元素都將放置到第二個子元素中。

接下來,使用 cd 指令將目錄切換至 drag-and-drop-demo  資料夾:

步驟 2:初始設定

在本教學中,我們將建立 HTML、CSS 和 JavaScript 檔案並將它們連結。首先,將檔案分別命名為 index.html, styles.cssscripts.js 檔案。

接下來,在 「我的晨間計畫」 檔案中新增標題: index.html 檔案:

接下來,連結 CSS,並將 JavaScript 新增至 HTML:

現在,我們將建立一個初始容器,並添加我們想要拖放的元素。請確保設定屬性 draggable="true",並添加您想要拖放的項目清單。

接下來,在 <body> 標籤中添加以下幾行程式碼:

儲存並關閉 index.html 檔案。之後,嘗試在瀏覽器中開啟 index.html 檔案,您將會看到一個頁面開啟:

接下來,讓我們使用 CSS 來為我們的 index.html  進行樣式設計,使其看起來美觀。

步驟 3:使用 CSS 進行樣式設計

接下來,為我們在 index.html 檔案中包含的所有元素添加樣式:

嘗試在瀏覽器中開啟 index.html 檔案並查看輸出結果:

Creating Drag and Drop Elements with Pure, Vanilla JavaScript 1

雖然我們已經完成了結構建置並添加了樣式,但這些元素仍然是靜態的。這意味著,在我們為其添加動態功能之前,我們無法移動或滾動元素。在下一步中,我們將引入 JavaScript 和動態行為。

步驟 4:引入 JavaScript

在此步驟中,我們將引入 JavaScript 並使所有拖曳元素發揮作用。在 JS 檔案中,設定我們需要的元素。讓我們定義 draggable 以及 containers 來分別進行拖放元素。

在 中加入這兩行程式碼scripts.js 檔案:

接下來,設定所有的事件監聽器。首先加入 dragstart 元素作為第一個事件監聽器,以 add 類別列表。同樣地,加入 dragend 元素作為第二個事件監聽器,以 remove 類別列表。

在您的 EventListeners 中附加以下 scripts.js 檔案:

接下來,加入 dragover EventListener,用於懸停和移動我們的元素。設定目前的 draggable 元素,使用 querySelector,然後將拖曳元素附加到目前的容器中:

預設情況下,在元素內部進行放置是被停用的。使用 e.preventDefault 來啟用它:

接下來,建立一個元素來確定滑鼠位置。首先建立一個 函式getDragAfterElement,它將接受兩個參數。第一個是 container,而第二個參數 y 將處理滑鼠的 Y 軸位置。現在,使用 querySelectorAll 函式來取得我們的拖曳元素。定義一個 draggableElements 指向容器內的所有拖曳元素:

接下來,呼叫一個 reduce 函式,該函式將循環遍歷拖曳元素列表,並指定滑鼠游標後面的單個元素。接下來, return 該 reduce 函式,並將第一個元素加入為 closest,第二個加入為 child。此外,使 相等offset 並加入條件。

請在 scripts.js 檔案中加入以下幾行程式碼:

在最後一部分中,我們將設定條件並檢查 AfterElements。使用 AfterElements 檢查 if-else 條件,如果它被設定為 null,則使用 appendChild 在清單末尾附加子節點。否則,將元素 draggableafterElement 作為參數傳入 insertBefore 函式。

將此包含在 scripts.js 檔案中:

現在我們已經完成了必要的設定。打開您的瀏覽器並執行 index.html。您將在瀏覽器中看到 “My Morning Scheduler” 頁面,其中包含拖放選項。中間的白線起到了橋樑作用,用於區分已完成的任務和待完成的任務:

結論

拖放是現代網站中一個非常棒的選擇。在本指南中,我們使用了少數幾個事件處理常式,以便讓初學者更容易上手。總共有八個事件處理常式,我們鼓勵您在進階學習時使用它們。一旦您熟悉了本教學中使用的函式和程式碼,就可以深入研究 JavaScript 主題,例如 jQuery 並開始探索。您也可以嘗試使用 JavaScript 日期和時間功能,以及利用您剛剛學到的概念建立其他應用程式。

若要進一步學習更多關於 JavaScript 和網頁開發的主題,請參考來自 我們部落格:

祝您運算愉快!

author

Shreyas Patil

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。