在这篇文章中,我们将了解如何使用 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>
这两个盒子将作为我们的“放置区”。用户将能够将一个项目从一个框中拖放到另一个框中。
<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(); };
最后,将这些事件处理程序应用到框中:
<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>
现场演示
此示例演示了只需几行代码即可轻松实现拖放功能。您可以通过添加更多拖放目标或进一步自定义元素的外观和行为来扩展此功能!
原帖
以上是HTML5 中的拖放的详细内容。更多信息请关注PHP中文网其他相关文章!