2014-11-05 7 views
8

मैं इस समय एक अपलोड स्क्रिप्ट पर काम कर रहा हूं, और निश्चित रूप से इसमें ड्रैग और ड्रॉप क्षमताएं हैं।jQuery ड्रैगेंटर या ड्रैगओवर बच्चों को शामिल करने के लिए

हालांकि मैं इस पाने के लिए काम करने के लिए जब मैं अपने तत्व पर एक फ़ाइल खींचें यह कहते कोशिश कर रहा हूँ वर्ग ड्रैग से अधिक लेकिन क्योंकि मेरे तत्व बच्चों यह लगातार फायरिंग कर रहा है क्योंकि यह प्रवेश करती है और छोड़ देता है तत्व।

मैं क्या जानना चाहता हूं मैं मुख्य तत्व बच्चों को शामिल करने के लिए *dragenter*/*dragover* का विस्तार कैसे कर सकता हूं?

यहाँ (कृपया ध्यान दें मैं फ़ाइल इनपुट निष्क्रिय कर दिया है) मेरे कोड का एक कांट छांट संस्करण है:

$(document).ready(function(){ 
 
    $(window).on('dragenter', function(){ 
 
     $(this).preventDefault(); 
 
    }); 
 
    $('#drag-and-drop-zone').on('dragenter', function(){ 
 
     $(this).addClass('drag-over'); 
 
    }); 
 
    $('#drag-and-drop-zone').on('dragleave', function(){ 
 
     $(this).removeClass('drag-over'); 
 
    }); 
 
});
.uploader 
 
{ 
 
    width: 100%; 
 
    background-color: #f9f9f9; 
 
    color: #92AAB0; 
 
    text-align: center; 
 
    vertical-align: middle; 
 
    padding: 30px 0px; 
 
    margin-bottom: 10px; 
 
    border-radius: 5px; 
 
    font-size: 200%; 
 
    box-shadow: inset 0px 0px 20px #c9afb2; 
 
    cursor: default; 
 
    -webkit-touch-callout: none; 
 
    -webkit-user-select: none; 
 
    -khtml-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
} 
 

 
.uploader div.or { 
 
    font-size: 50%; 
 
    font-weight: bold; 
 
    color: #C0C0C0; 
 
    padding: 10px; 
 
} 
 

 
.uploader div.browser label { 
 
    background-color: #ffffff; 
 
    border: 2px solid #f44; 
 
    padding: 5px 15px; 
 
    color: #f44; 
 
    padding: 6px 0px; 
 
    font-size: 40%; 
 
    font-weight: bold; 
 
    cursor: pointer; 
 
    border-radius: 2px; 
 
    position: relative; 
 
    overflow: hidden; 
 
    display: block; 
 
    width: 300px; 
 
    margin: 20px auto 0px auto; 
 
    transition: all 0.3s linear 0s; 
 
} 
 

 
.uploader div.browser span { 
 
    cursor: pointer; 
 
} 
 

 
.uploader div.browser input { 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    margin: 0; 
 
    border: solid transparent; 
 
    border-width: 0 0 100px 200px; 
 
    opacity: .0; 
 
    filter: alpha(opacity= 0); 
 
    direction: ltr; 
 
    cursor: pointer; 
 
} 
 

 
.uploader div.browser label:hover { 
 
    background-color: #f44; 
 
    color: #fff; 
 
    border: 2px solid #fff; 
 
} 
 

 
.drag-over{ 
 
    border: 2px solid #00aef0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<div class="uploader" id="drag-and-drop-zone"> 
 
    <div>Drag &amp; Drop Images Here</div> 
 
    <div class="or">-or-</div> 
 
    <div class="browser"> 
 
     <label> 
 
      <span>Select Image</span> 
 
      <input type="file" title="Click to add Images" accept="image/*" name="files" disabled="true"> 
 
     </label> 
 
    </div> 
 
</div>

उत्तर

9

यह हल !!

यह ('dragenter') पर बजाय पर का एक सरल मामले मैं बाँध ('dragover') का उपयोग करने के लिए आवश्यक है

$(document).ready(function(){ 
 
    $(window).on('dragenter', function(){ 
 
     $(this).preventDefault(); 
 
    }); 
 
    $('#drag-and-drop-zone').bind('dragover', function(){ 
 
     $(this).addClass('drag-over'); 
 
    }); 
 
    $('#drag-and-drop-zone').bind('dragleave', function(){ 
 
     $(this).removeClass('drag-over'); 
 
    }); 
 
});
.uploader 
 
{ 
 
    width: 100%; 
 
    background-color: #f9f9f9; 
 
    color: #92AAB0; 
 
    text-align: center; 
 
    vertical-align: middle; 
 
    padding: 30px 0px; 
 
    margin-bottom: 10px; 
 
    border-radius: 5px; 
 
    font-size: 200%; 
 
    box-shadow: inset 0px 0px 20px #c9afb2; 
 
    cursor: default; 
 
    -webkit-touch-callout: none; 
 
    -webkit-user-select: none; 
 
    -khtml-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
} 
 

 
.uploader div.or { 
 
    font-size: 50%; 
 
    font-weight: bold; 
 
    color: #C0C0C0; 
 
    padding: 10px; 
 
} 
 

 
.uploader div.browser label { 
 
    background-color: #ffffff; 
 
    border: 2px solid #f44; 
 
    padding: 5px 15px; 
 
    color: #f44; 
 
    padding: 6px 0px; 
 
    font-size: 40%; 
 
    font-weight: bold; 
 
    cursor: pointer; 
 
    border-radius: 2px; 
 
    position: relative; 
 
    overflow: hidden; 
 
    display: block; 
 
    width: 300px; 
 
    margin: 20px auto 0px auto; 
 
    transition: all 0.3s linear 0s; 
 
} 
 

 
.uploader div.browser span { 
 
    cursor: pointer; 
 
} 
 

 
.uploader div.browser input { 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    margin: 0; 
 
    border: solid transparent; 
 
    border-width: 0 0 100px 200px; 
 
    opacity: .0; 
 
    filter: alpha(opacity= 0); 
 
    direction: ltr; 
 
    cursor: pointer; 
 
} 
 

 
.uploader div.browser label:hover { 
 
    background-color: #f44; 
 
    color: #fff; 
 
    border: 2px solid #fff; 
 
} 
 

 
.drag-over{ 
 
    border: 2px solid #00aef0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<div class="uploader" id="drag-and-drop-zone"> 
 
    <div>Drag &amp; Drop Images Here</div> 
 
    <div class="or">-or-</div> 
 
    <div class="browser"> 
 
     <label> 
 
      <span>Select Image</span> 
 
      <input type="file" title="Click to add Images" accept="image/*" name="files" disabled="true"> 
 
     </label> 
 
    </div> 
 
</div>

+0

पर बांधने से पहले माता-पिता को पैरेंट तत्व से बाध्य करना क्यों काम करता है लेकिन काम नहीं करता है। मुझे अपने सभी श्रोताओं के लिए $ .fn.on का उपयोग करने के लिए कहा गया था। – TarranJones

+0

यह ठीक से काम नहीं करता है, इसका उद्देश्य निरंतर ड्रैगओवर क्लास होना है, इस समाधान में रीफ्रेश व्यवहार है जिसमें ड्रैगओवर क्लास के बिना कुछ ब्लिंक हैं ... –

0

आप बस स्टाइल के साथ माउस बातचीत से तत्व छिपा सकते हैं:

उदाहरण बच्चे तत्वों से जोड़ें:

pointer-events: none; 

दुर्भाग्य से समर्थन नहीं महान IE में इस बात के लिए है: http://caniuse.com/#feat=pointer-events

+0

आदर्श रूप में मैं एक क्रॉस ब्राउज़र को ठीक करना चाहते हैं "यह इन पर काम करेगा, लेकिन इन नहीं"। यह उत्पादन स्तर कोड है इसलिए 100% होने की आवश्यकता है - हालांकि उत्तर देने के लिए धन्यवाद! – JustSteveKing

+0

@JustSteveKing: हाँ, इसके बारे में खेद है। विकल्प खींचने के दौरान माउस खत्म होने के बारे में एक और जटिल जांच है (क्या यह माता-पिता के अंदर है)। –

+0

वैसे भी धन्यवाद :) इस समय कुछ पर काम कर रहा है। मैं सोच रहा हूं कि ड्रैगओवर को – JustSteveKing

संबंधित मुद्दे