आप इस स्निपेट का उपयोग कर सकते हैं।
महत्वपूर्ण कार्य है: $.event.special.drop.locate();
क्रोम/सफारी/फ़ायरफ़ॉक्स/IE9 पर परीक्षण किया गया और काम करने के लिए लगता है।
SEE DEMO
अद्यतन
वाली ईवेंट के लिए निम्न कोड काम करता है या नहीं। मैंने इसे किसी भी वैश्विक चर से बचने के लिए बस एक अज्ञात फ़ंक्शन के अंदर सेट किया है। आइडिया घटना की वर्तमान लक्ष्य संपत्ति का उपयोग करना है यह जांचने के लिए कि क्या वही तत्व उसी ईवेंट को ट्रिगर नहीं कर रहा है या नहीं। मैंने यहां परीक्षण के उद्देश्य से न्यूड्रोप तत्व पर एक आईडी सेट की है।
SEE UPDATED DEMO
(function() {
var $body = $("body"),
newdrops = [],
currentTarget = {},
ondragstart = function() {
$(this).css('opacity', .75);
}, ondrag = function (ev, dd) {
$(this).css({
top: dd.offsetY,
left: dd.offsetX
});
}, ondragend = function() {
$(this).css('opacity', '');
for (var i = 0, z = newdrops.length; i < z; i++)
$(newdrops[i]).off('dropstart drop dropend').removeClass('tempdrop');
newdrops = [];
}, ondropstart = function (e) {
if (currentTarget.dropstart === e.currentTarget) return;
currentTarget.dropstart = e.currentTarget;
currentTarget.dropend = null;
console.log('start::' + e.currentTarget.id)
$(this).addClass("active");
}, ondrop = function() {
$(this).toggleClass("dropped");
}, ondropend = function (e) {
if (currentTarget.dropend === e.currentTarget) return;
currentTarget.dropend = e.currentTarget;
currentTarget.dropstart = null;
console.log('end::' + e.currentTarget.id)
$(this).removeClass("active");
};
$body.on("dragstart", ".drag", ondragstart)
.on("drag", ".drag", ondrag)
.on("dragend", ".drag", ondragend)
.on("dropstart", ".drop", ondropstart)
.on("drop", ".drop", ondrop)
.on("dropend", ".drop", ondropend);
var cnt = 0;
setInterval(function() {
var dataDroppables = $body.data('dragdata')['interactions'] ? $body.data('dragdata')['interactions'][0]['droppable'] : [];
var $newDrop = $('<div class="drop tempdrop" id="' + cnt + '">Drop</div>');
cnt++;
$("#dropWrap").append($newDrop);
var offset = $newDrop.offset();
var dropdata = {
active: [],
anyactive: 0,
elem: $newDrop[0],
index: $('.drop').length,
location: {
bottom: offset.top + $newDrop.height(),
elem: $newDrop[0],
height: $newDrop.height(),
left: offset.left,
right: offset.left + $newDrop.width,
top: offset.top,
width: $newDrop.width
},
related: 0,
winner: 0
};
$newDrop.data('dropdata', dropdata);
dataDroppables.push($newDrop[0]);
$newDrop.on("dropstart", ondropstart)
.on("drop", ondrop)
.on("dropend", ondropend);
$.event.special.drop.locate($newDrop[0], dropdata.index);
newdrops.push($newDrop[0]);
}, 1000);
})();
देख रहे हैं अच्छा काम! मुझे लगता है कि Blowsie प्रसन्न होगा –
'डेटा ('ड्रैगडाटा') ['इंटरैक्शन'] 'सुंदर कुंजी थी! धन्यवाद – Blowsie
यह भी कोई विचार है कि आप ईवेंट ओवरलैपिंग को कैसे रोक सकते हैं? Http://jsfiddle.net/blowsie/qtnQF/2/ – Blowsie