2012-01-30 26 views
6

मैं जीमेल के समान फ़ाइल अपोलोड सिस्टम को कार्यान्वित करने की कोशिश कर रहा हूं। मैंने पहले ही सभी फाइलअपलोड/AJAX समस्या पूरी की है और यह सही काम करता है। मेरे पास एकमात्र समस्या है जो उपयोगकर्ता फ़ीडबैक है।जावास्क्रिप्ट ईवेंट क्या होता है जब आप अपने डेस्कटॉप से ​​फ़ाइल को अपने ब्राउज़र पर खींचते हैं

उदाहरण के लिए .. जीमेल में, जब आप अपने ब्राउज़र में फ़ाइल खींचते हैं (IE9 + उपयोगकर्ता मानते हैं), वहां एक ऐसा क्षेत्र है जो आपको पॉप-अप करने देता है, जिससे आप फ़ाइल को छोड़ देते हैं। मुझे लगता है कि यह किसी प्रकार का जावास्क्रिप्ट ईवेंट है एक ढांचे द्वारा कब्जा कर लिया (चलो Jquery कहते हैं), जो मुझे ड्रॉप क्षेत्र पर कुछ शांत एनिमेशन बनाने की अनुमति देता है।

मेरा प्रश्न सरल है .. मुझे ऐसा करने के लिए किस घटना को कैप्चर करना चाहिए? कोई विचार? क्या मैं इसे गलत कर रहा हूँ?

उत्तर

8

मुख्य कार्यक्रम केवल drop है।

आपको dragenter और dragleave को संभालने की भी आवश्यकता होगी अन्यथा ड्रॉप कार्रवाई केवल गिराए गए फ़ाइलों का भार उत्पन्न करेगी। आप वैकल्पिक रूप से dragover देख सकते हैं। इस मामले dragenter और dragleave संचालकों जब सामान यह में घसीटा जा रहा है सिर्फ ड्रॉप जोन का स्वरूप बदलने के लिए कर रहे हैं में

var $dz = $('#dropzone'); 
$dz.on({ 
    dragenter: dragenter, 
    dragleave: dragleave, 
    dragover: false, 
    drop: drop 
}); 

function dragenter() { 
    $dz.addClass('active'); 
}; 

function dragleave() { 
    $dz.removeClass('active'); 
}; 

function drop(e) { 
    var dt = e.originalEvent.dataTransfer; 
    if (dt) { 
     var files = dt.files; 
     ... 
    } 
    $dz.removeClass('active'); 
}; 

:

मैं कुछ कोड है कि इन संचालकों पंजीकृत करता है, तो तरह है।

+0

कूल! मेरी इच्छा है कि मेरा मालिक इस सुविधा को चाहेगा। – gdoron

+0

ठीक है, यह वास्तव में थोड़े काम है, लेकिन केवल जब मैं ड्रॉप क्षेत्र पर ड्रैग किए गए आइटम को पास करता हूं .. मुझे अभी भी पता नहीं है कि ड्रॉप क्षेत्र कहां है .. तो मैंने सोचा .. अच्छा। $ (तत्व) के बजाय .on .... बीमार $ ("बॉडी") का उपयोग करें। ... यह अच्छी तरह से ट्रिगर करता है, लेकिन जब मैं किसी अन्य div में प्रवेश करता हूं (मान लें कि मेरे पास निश्चित चौड़ाई वाला केंद्र है, तो दोनों तरफ कुछ खाली जगह है कि हम कह सकते हैं कि "शुद्ध शरीर टैग है"), फिर यह छुट्टी हैंडलरों को ट्रिगर करता है ... मैं यह समझता हूं कि पूरे पृष्ठ में "प्रवेश" को कैसे बनाए रखा जाए, और केवल ट्रिगर्स "छोड़ दें" जब यह वास्तव में ब्राउज़र क्षेत्र को पूरी तरह से छोड़ देता है। मदद के लिए धन्यवाद –

+0

इसके अलावा, यह sux की तरह लगता है .. माउस पिक्सल हर पिक्सेल पर "ड्रैगेंटर" ट्रिगर्स की तरह लगता है। तो मान लें कि मैं 2 सेकंड के लिए ड्रॉपज़ोन पर एक अच्छा "शेक" प्रभाव खेलता हूं .. अच्छा .. यह वास्तव में इसके जमे हुए की तरह लगता है, cuz यह तब तक हिलना बंद नहीं करेगा जब तक मैं माउस को आगे बढ़ता रहता हूं। –

3

इसे drop कहा जाता है, और ईवेंट ऑब्जेक्ट से आपको आवश्यक गुण मूल संपत्ति में होंगे।

$(element).on("drop",function(e){ 
    console.log(e.originalEvent) 
}); 

आप भी dragenter निकल और है कि एक ही तत्व पर dragleave को यह ड्रॉप ईवेंट सक्रिय करने के लिए, अगर मैं सही ढंग से याद की जरूरत है।

$(element).on("dragenter dragleave", false); 
+0

ड्रैगेंटर और ड्रैगलेव के बारे में अच्छा नोट - मेरे पास उन्हें मेरे कोड में है लेकिन भूल गया था कि उन्हें वास्तव में आवश्यक था। – Alnitak

+0

@Annitak - हाँ, जिसने मुझे एक लूप के लिए फेंक दिया जब मैंने पहली बार इस कार्यक्षमता को लागू करने की कोशिश की। मैं पूरे विचार को तोड़ने और jquery के ड्रैग-एंड-ड्रॉप के साथ जा रहा था क्योंकि मैं टेक्स्ट एरिया का उपयोग कर रहा हूं और इन घटनाओं के लिए बाइंडिंग के सामान्य उपयोग के साथ बाध्यकारी हूं। –