$(document).ready(function() {
function touchHandler(event) {
var touch = event.changedTouches[0];
var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent({
touchstart: "mousedown",
touchmove: "mousemove",
touchend: "mouseup"
}[event.type], true, true, window, 1,
touch.screenX, touch.screenY,
touch.clientX, touch.clientY, false,
false, false, false, 0, null);
touch.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}
function init() {
document.addEventListener("touchstart", touchHandler, true);
document.addEventListener("touchmove", touchHandler, true);
document.addEventListener("touchend", touchHandler, true);
document.addEventListener("touchcancel", touchHandler, true);
}
init();
var bindDrag_drap = function(item1, item2) {
$(item1, item2).droppable({
drop: function(event, ui) {
$(this).append(ui.helper.children());
$('.' + selectedClass).remove();
}
});
};
var bindDragMouseEvent = function(item) {
$(item)
.bind('mousedown mouseup', function(e) {
if(e.type == "mousedown") {
lastClick = e.timeStamp;
} else {
diffClick = e.timeStamp - lastClick;
if(diffClick < clickDelay) {
$(this).toggleClass(selectedClass);
var el = $(this)[0].firstElementChild;
el.checked = $(this)[0].className.indexOf('ui-state-highlight') != -1 ? true : false;
}
}
});
};
var bindDropEvent = function(item, contaier) {
$(item).draggable({
revertDuration: 10,
containment: contaier,
start: function(e, ui) {
ui.helper.addClass(selectedClass);
},
stop: function(e, ui) {
$('.' + selectedClass).css({
top: 0,
left: 0
});
},
helper: function() {
var selected = $('.' + selectedClass);
if(selected.length === 0) {
selected = $(this).addClass(selectedClass);
}
var container = $('<div/>').attr('id', 'draggingContainer');
container.append(selected.clone().removeClass(selectedClass));
return container;
},
drag: function(e, ui) {
$('.' + selectedClass).css({
top: ui.position.top,
left: ui.position.left
});
}
});
};
var selectedClass = 'ui-state-highlight',
clickDelay = 600,
lastClick, diffClick;
bindDragMouseEvent('#draggable1 li');
bindDropEvent("#draggable1 li", '.demo1');
bindDrag_drap("#droppable1, #draggable1");
bindDragMouseEvent('#draggable tr');
bindDropEvent("#draggable tr", '.demoTR');
bindDrag_drap("#droppable, #draggable");
});