/**
* HTML5 Drag & Drop with Event Delegation
*
* <div id="delegated">
* <h2>New school drag and drop, now with Event Delegation!</h2>
* <ul class="drag_delegates">
* <li class="dragme" id="drag0" draggable="true">Drag 0</li>
* <li class="dragme" id="drag1" draggable="true">Drag 1</li>
* <li class="dragme" id="drag2" draggable="true">Drag 2</li>
* <li><a href="#" class="spawn">+ Add another</a></li>
* </ul>
* <ul class="drop_delegates">
* <li class="drophere" id="drop0">Drop 0</li>
* <li class="drophere" id="drop1">Drop 1</li>
* <li class="drophere" id="drop2">Drop 2</li>
* <li><a href="#" class="spawn">+ Add another</a></li>
* </ul>
* <p><a href="js/drag-delegated.js" target="_blank">View JS Source</a></p>
* </div>
*/
$(document).ready(function() {
// Set up the draggable element.
$('#delegated .drag_delegates')
.bind('dragstart', function(ev) {
if (!$(ev.target).hasClass('dragme')) return true;
var dt = ev.originalEvent.dataTransfer;
dt.setData("Text", "Dropped " + ev.target.id);
return true;
});
// Set up the drop zone.
$('#delegated .drop_delegates')
// Update the drop zone class on drag enter/leave
.bind('dragenter', function(ev) {
if (!$(ev.target).hasClass('drophere')) return true;
$(ev.target).addClass('dragover');
return false;
})
.bind('dragleave', function(ev) {
if (!$(ev.target).hasClass('drophere')) return true;
$(ev.target).removeClass('dragover');
return false;
})
// Allow drops of any kind into the zone.
.bind('dragover', function(ev) {
if (!$(ev.target).hasClass('drophere')) return true;
return false;
})
// Handle the final drop...
.bind('drop', function(ev) {
if (!$(ev.target).hasClass('drophere')) return true;
var dt = ev.originalEvent.dataTransfer;
$.log('#delegated .messages',
dt.getData("Text") + ' onto ' + ev.target.id);
ev.stopPropagation();
return false;
});
// Wire up the factory links for draggables and drop zones.
$.each(['drag_delegates', 'drop_delegates'], function() {
var root = $('#delegated .' + this);
root.data('last_spawn_id', root.find('li').length - 2);
root.find('a.spawn').click(function(ev) {
// Clone the first one in the list as a template.
var new_li = root.find('li:first').clone();
// Come up with a new ID for the item.
var new_id = root.data('last_spawn_id') + 1;
root.data('last_spawn_id', new_id);
// Replace "0" in the ID and text with the new ID
new_li.text(new_li.text().replace('0', new_id) );
new_li.attr('id', new_li.attr('id').replace('0', new_id) );
// Toss the new item in before the spawn link.
new_li.insertBefore(ev.target.parentNode);
return false;
});
});
});
http://decafbad.com/blog/2009/07/15/html5-drag-and-drop
My searching is ending here. It will be useful. Thanks once again.
ReplyDeletehtml5 player| html5 video player