← Back to HTML Course | Chapter 7: Advanced APIs & Features | Lesson 4 of 11

HTML Drag and Drop

सोचिए आप ऑफिस डेस्क पर बैठे फोल्डर्स सॉर्ट कर रहे हैं। अगर आपको कोई डॉक्यूमेंट कैबिनेट में रखना है, तो आप कोई कमांड टाइप नहीं करते या स्क्रीन पर ऑप्शंस सेलेक्ट नहीं करते। आप बस फोल्डर उठाते हैं और सीधे कैबिनेट की दराज में स्लाइड कर देते हैं। HTML Drag and Drop इस नेचुरल इंटरैक्शन को सीधे आपके वेबपेज पर ले आता है, जिससे यूज़र्स एलिमेंट्स को पकड़ सकते हैं, उन्हें स्क्रीन पर स्लाइड कर सकते हैं, और टारगेट ज़ोन्स में ड्रॉप कर सकते हैं। यह इंटरैक्टिव टास्क बोर्ड्स, शॉपिंग कार्ट्स, या ड्रैग-एंड-ड्रॉप फाइल अपलोडर्स बनाने के लिए बेहतरीन टूल है।
Syntax
markup
<tagname draggable="true" ondragstart="handler(event)">Drag me</tagname>
<tagname ondrop="drop(event)" ondragover="event.preventDefault()">Drop zone</tagname>

Drag and Drop को समझना

HTML Drag and Drop इंटरैक्शन्स को मैनेज करने के लिए स्टैंडर्ड ब्राउज़र इवेंट्स का उपयोग करता है। एलिमेंट्स को draggable बनाया जा सकता है, ड्रॉप टार्गेट्स को ड्रॉप स्वीकार करने के लिए कॉन्फ़िगर किया जाता है, और डेटा को सुरक्षित रूप से उनके बीच ट्रांसफर किया जाता है।

Note: फाइल अपलोड करने जैसे जटिल कामों को अपने यूज़र्स के लिए सहज बनाने के लिए drag-and-drop इंटरैक्शन्स का उपयोग करें।
Warning: कस्टम हेल्पर स्क्रिप्ट्स के बिना टचस्क्रीन मोबाइल डिवाइसेस पर ड्रैग-एंड-ड्रॉप इंटरैक्शन इस्तेमाल करना मुश्किल हो सकता है।

उदाहरण: Understanding Drag and Drop

markup
<div draggable="true" ondragstart="event.dataTransfer.setData('text', 'item1')">Drag me</div>
<div ondrop="event.preventDefault()" ondragover="event.preventDefault()">Drop here</div>

एलिमेंट्स को Draggable बनाना

किसी भी एलिमेंट को draggable बनाने के लिए, आप उसके ओपनिंग टैग में draggable="true" एट्रिब्यूट जोड़ते हैं और यह बताने के लिए कि कौन-सा डेटा ट्रांसफर होना चाहिए, ondragstart इवेंट लिसनर बाइंड करते हैं।

इस एट्रिब्यूट के बिना एलिमेंट सिर्फ सिलेक्टेबल टेक्स्ट या एक स्टैटिक इमेज ही रहता है, और उसे ड्रैग करने से कुछ नहीं होता।

Note: हमेशा अपने draggable एलिमेंट्स पर एक यूनीक ID दें ताकि drag-and-drop फ्लो के दौरान आपकी स्क्रिप्ट्स उन्हें पहचान सकें।
Warning: इमेज और लिंक्स डिफॉल्ट रूप से draggable होते हैं; अगर आप उन्हें जगह पर लॉक करना चाहते हैं तो draggable="false" सेट करना ज़रूरी है।

उदाहरण: Making Elements Draggable

markup
<div id="item1" draggable="true" ondragstart="event.dataTransfer.setData('text', 'item1')">
  Drag me
</div>

ड्रॉप टार्गेट्स कॉन्फ़िगर करना

डिफ़ॉल्ट रूप से, ब्राउज़र वेबपेज लेआउट पर एलिमेंट्स ड्रॉप करने से रोकते हैं। किसी एलिमेंट को ड्रॉप टार्गेट बनाने के लिए, आपको ondragover इवेंट बाइंड करना होगा और ड्रॉप करने की अनुमति देने के लिए preventDefault कॉल करना होगा।

Note: यूज़र्स को यह दिखाने के लिए कि वे किसी वैलिड ड्रॉप टार्गेट पर होवर कर रहे हैं, सिंपल विज़ुअल होवर स्टाइल्स का उपयोग करें।
Warning: अगर आप dragover इवेंट पर preventDefault कॉल करना भूल जाते हैं, तो ब्राउज़र सभी drops को ब्लॉक कर देगा।

उदाहरण: Configuring Drop Targets

markup
<div ondragover="event.preventDefault()" ondrop="event.preventDefault()">
  Drop Zone
</div>

DataTransfer से डेटा ट्रांसफर करना

DataTransfer ऑब्जेक्ट drag-and-drop प्रोसेस के दौरान डेटा एक्सचेंज को मैनेज करता है। यह आपको ड्रैग स्टार्ट पर वैल्यूज़ (जैसे टेक्स्ट, IDs, या URLs) सेव करने और ड्रॉप पर उन्हें वापस पाने देता है।

साधारण टेक्स्ट के लिए 'text/plain' और लिंक या फाइल रेफरेंस के लिए 'text/uri-list' जैसे कॉमन फॉर्मैट्स आमतौर पर इस्तेमाल होते हैं।

Note: अपने drag-and-drop एलिमेंट्स के बीच साफ-सुथरी, स्ट्रक्चर्ड JSON स्ट्रिंग्स पास करने के लिए DataTransfer का उपयोग करें।
Warning: DataTransfer केवल dragstart और drop इवेंट्स के दौरान ही एक्सेस किया जा सकता है; dragover के दौरान इसे पढ़ने की कोशिश करने पर खाली वैल्यूज़ मिलेंगी।

उदाहरण: Transferring Data with DataTransfer

markup
<div draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'Hello')">Drag</div>
<div ondragover="event.preventDefault()" ondrop="console.log(event.dataTransfer.getData('text/plain'))">
  Drop
</div>

लोकल फाइल्स को ड्रॉप ज़ोन में ड्रैग करना

drag-and-drop का सबसे आम इस्तेमाल यह है कि यूज़र्स को अपने कंप्यूटर से फिज़िकल फाइल्स सीधे ड्रैग करके आपके वेब एप्लिकेशन में ड्रॉप कर अपलोड करने देना।

एक बार फाइल्स के ड्रॉप ज़ोन के इवेंट हैंडलर में पहुँच जाने के बाद, उन्हें पढ़ने के लिए FileReader API की ज़रूरत होती है।

Note: जैसे ही यूज़र अपनी फाइल्स ड्रॉप करें, उनके इमेज प्रीव्यू प्रोसेस करने और दिखाने के लिए स्टैंडर्ड file reader स्क्रिप्ट्स का उपयोग करें।
Warning: सुनिश्चित करें कि आपके drop zones की बॉर्डर साफ हों ताकि यूज़र्स को पता चले कि उन्हें अपनी फाइलें कहाँ ड्रॉप करनी हैं।

उदाहरण: Dragging Local Files into Drop Zones

markup
<div ondragover="event.preventDefault()" ondrop="console.log(event.dataTransfer.files)">
  Drop files here
</div>
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.