API Types
🤏 Drag and Drop API — Uthao Aur Rakh Do
draggable="true" ondragstart / ondrop
Drag and Drop API se users elements ko utha kar doosri jagah rakh sakte hain. Jaise physical to-do list mein item move karna — "Buy onions" card uthao aur "Pending" se "Done" column mein rakh do.
Do taraf hain: drag source (draggable="true") aur drop target (dragover aur drop events sunta hai). Drag ke dauraan 7 events fire hote hain: dragstart → drag → dragend (source pe) aur dragenter → dragover → dragleave → drop (target pe). dragover mein event.preventDefault() ZAROOR call karo — warna drop kaam nahi karega.
Physical Card Analogy: IT office mein Kanban board socho — "To Do", "In Progress", "Done" columns. Sticky note uthao (dragstart), column ke upar le jao (dragover), "Done" mein rakh do (drop). HTML5 Drag & Drop yahi process digital mein karta hai.
Code Example
HTML — Drag and Drop API — Uthao Aur Rakh Do
<!-- Draggable item -->
<div
id="item1"
draggable="true"
ondragstart="handleDragStart(event)"
style="padding: 12px; background: #f0f0f0; margin: 8px 0; cursor: grab;"
>
🧅 Biryani Ingredients Khareedo
</div>
<!-- Drop zone -->
<div
id="dropZone"
ondragover="handleDragOver(event)"
ondragleave="handleDragLeave(event)"
ondrop="handleDrop(event)"
style="padding: 24px; border: 2px dashed #ccc; min-height: 100px;"
>
Items yahan drop karo
</div>
<script>
let draggedItem = null;
function handleDragStart(e) {
draggedItem = e.target;
e.dataTransfer.effectAllowed = "move";
e.dataTransfer.setData("text/plain", e.target.id);
e.target.style.opacity = "0.5";
}
function handleDragOver(e) {
e.preventDefault(); // ZAROORI — bina iske drop nahi hoga!
e.dataTransfer.dropEffect = "move";
e.currentTarget.style.borderColor = "#10b981";
e.currentTarget.style.background = "#f0fdf4";
}
function handleDragLeave(e) {
e.currentTarget.style.borderColor = "#ccc";
e.currentTarget.style.background = "transparent";
}
function handleDrop(e) {
e.preventDefault();
e.currentTarget.style.borderColor = "#ccc";
e.currentTarget.style.background = "transparent";
if (draggedItem) {
e.currentTarget.appendChild(draggedItem);
draggedItem.style.opacity = "1";
draggedItem = null;
}
}
</script>draggable="true"Element ko draggable banao — default false haiondragstartDrag shuru hone pe — data store karo, opacity change karoondragoverTarget ke upar drag karne pe — MUST preventDefault() karoondropItem drop hone pe — element ko yahan move karoondragleaveTarget se drag bahar jane pe — styles reset karoe.preventDefault() in dragoverZAROORI — bina iske browser drop block karta hai by default!dataTransfer.setData()Drag ke dauran data store karo — ID, text, ya custom datadataTransfer.filesDropped files access karo — file upload drag & drop ke liye✅ When to Use
- Kanban boards (Trello jaisa)
- Reorderable lists (items ko drag se sort karo)
- File upload areas (files ko zone mein drag karo)
- Shopping cart (items cart mein drag karo)
- Image galleries (photos reorder karo)
❌ When NOT to Use
- Mobile apps (touch drag ke liye alag handling chahiye — touch events ya libraries use karo)
- Simple click interactions (drag overkill hai move/click ke liye)
- Complex sorting chahiye (SortableJS jaisi library use karo)
Sabse bada bug:
dragover mein e.preventDefault() bhoolna. Browser ka default behavior drop ko block karna hai. Tumhe preventDefault zaroor karna hai. Aur drag & drop mobile pe achhe se kaam nahi karta — touch devices ke liye SortableJS jaisi library use karo.