首頁 > web前端 > js教程 > 主體

HTML5 中的拖放

Mary-Kate Olsen
發布: 2024-10-06 06:18:02
原創
367 人瀏覽過

在這篇文章中,我們將了解如何使用 HTML5 中的原生拖放介面在瀏覽器中實作拖放功能。

想法很簡單:

  • 自訂元素使其可拖曳
  • 允許將可拖曳元素放置在可放置區域中。

Drag and Drop in HTML5

聲明兩個盒子


<div className="flex gap-8">
  <div
    id="box1"
    className="w-[300px] h-[300px] border border-black flex items-center justify-center"
  />
  <div
    id="box2"
    className="w-[300px] h-[300px] border border-black flex items-center justify-center"
  />
</div>


登入後複製

這兩個盒子將作為我們的「放置區」。用戶將能夠將一個項目從一個框中拖放到另一個框中。

新增一個我們想要在「box1」內可拖曳的div


  <div
    id="box1"
    className="w-[300px] h-[300px] border border-black flex items-center justify-center"
  />
    <div
      id="draggable1"
      className="w-[50px] h-[50px] bg-red-500 cursor-move"
    />
  </div>


登入後複製

這個紅色方塊將是可以在框框之間拖曳的項目。

使元素可拖曳

要讓元素可拖曳,我們需要為其新增draggable屬性並處理dragstart事件。
當使用者開始拖曳專案時,將觸發 Dragstart 事件。以下是我們如何實現它:


const handleOnDragStart = (event) => {
  event.dataTransfer.setData("text/plain", event.target.id);
};


登入後複製

在這個函數中,我們使用 event.dataTransfer.setData() 來儲存被拖曳元素的 ID。這個 ID 稍後將幫助我們識別哪個元素被拖曳以及需要將其放置在何處。

接下來,更新draggable1 div使其可拖曳並新增onDragStart事件處理程序:


<div
  id="draggable1"
  className="w-[50px] h-[50px] bg-red-500 cursor-move"
  draggable="true"
  onDragStart="{handleOnDragStart}"
/>


登入後複製

刪除元素


const handleOnDrop = (event) => {
  event.preventDefault();
  const data = event.dataTransfer.getData("text/plain");
  event.target.appendChild(document.getElementById(data));
};

const handleDragOver = (event) => {
  event.preventDefault();
};


登入後複製
  • handleOnDrop 函數阻止預設行為(這對於允許放置很重要),從 event.dataTransfer 檢索拖曳元素的 ID,並將拖曳元素附加到放置目標。
  • handleDragOver 函數透過防止預設行為來確保拖曳的元素可以被刪除。

最後,將這些事件處理程序應用到框中:


<div
  id="box1"
  onDrop="{handleOnDrop}"
  onDragOver="{handleDragOver}"
  className="w-[300px] h-[300px] border border-black flex items-center justify-center"
>
  <div
    id="draggable1"
    className="w-[50px] h-[50px] bg-red-500 cursor-move"
    draggable="true"
    onDragStart="{handleOnDragStart}"
  />
</div>

<div
  id="box2"
  onDrop="{handleOnDrop}"
  onDragOver="{handleDragOver}"
  className="w-[300px] h-[300px] border border-black flex items-center justify-center"
/>


登入後複製

您可以新增視覺提示以在拖曳操作正在進行時突出顯示。我們將降低組件的不透明度。
這可以透過追蹤何時在狀態變數中執行拖曳操作並更改不透明度來完成。
這就是你的 React 元件的樣子


<p>import { useState } from "react";</p>

<p>const SimpleDragDrop = () => {<br>
  const [isDragging, setIsDragging] = useState(false);</p>

<p>const handleOnDragStart = (event) => {<br>
    setIsDragging(true);<br>
    event.dataTransfer.setData("text/plain", event.target.id);<br>
  };</p>

<p>const handleOnDrop = (event) => {<br>
    event.preventDefault();<br>
    setIsDragging(false);<br>
    const data = event.dataTransfer.getData("text/plain");<br>
    event.target.appendChild(document.getElementById(data));<br>
  };</p>

<p>const handleDragOver = (event) => {<br>
    event.preventDefault();<br>
  };</p>

<p>return (<br>
    <div className="flex gap-8"><br>
      <div<br>
        id="box1"<br>
        onDrop={handleOnDrop}<br>
        onDragOver={handleDragOver}<br>
        className="flex h-[300px] w-[300px] items-center justify-center border border-main"<br>
      ><br>
        <div<br>
          id="draggable1"<br>
          className={h-[50px] w-[50px] cursor-move bg-red-500 </span><span class="p">${</span><span class="nx">isDragging</span> <span class="p">?</span> <span class="dl">"</span><span class="s2">opacity-50</span><span class="dl">"</span> <span class="p">:</span> <span class="dl">"</span><span class="s2">opacity-100</span><span class="dl">"</span><span class="p">}</span><span class="s2">}<br>
          draggable={true}<br>
          onDragStart={handleOnDragStart}<br>
        /><br>
      </div><br>
      <div<br>
        id="box2"<br>
        onDrop={handleOnDrop}<br>
        onDragOver={handleDragOver}<br>
        className="flex h-[300px] w-[300px] items-center justify-center border border-main"<br>
      /><br>
    </div><br>
  );<br>
};</p>

<p>export default SimpleDragDrop;</p>

登入後複製




示範

現場示範

此範例示範了只需幾行程式碼即可輕鬆實現拖放功能。您可以透過添加更多拖放目標或進一步自訂元素的外觀和行為來擴展此功能!

閱讀更多

  • HTML 拖放 API
  • HTML5 拖放 API

原帖

以上是HTML5 中的拖放的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!