Vieux thread, je sais.......
Problème avec la réponse de @ryuutatsuo est qu'il bloque également toute saisie ou autre élément qui a réagir sur les "clics" (par exemple entrées), j'ai donc écrit cette solution. Cette solution a permis d'utiliser n'importe quel glisser-déposer de la bibliothèque qui est basée sur le mousedown, mousemove et mouseup événements sur n'importe quelle touche de l'appareil (ou cumputer). C'est aussi une solution de navigateur.
Je l'ai testé sur plusieurs appareils et il est rapide (en combinaison avec la fonction glisser-déposer de ThreeDubMedia (voir aussi http://threedubmedia.com/code/event/drag)). C'est un jQuery solution de sorte que vous pouvez l'utiliser uniquement avec jQuery libs. J'ai utilisé jQuery 1.5.1 pour elle parce que certains plus récents, les fonctions ne fonctionnent pas correctement avec IE9 et au-dessus (pas testé avec les nouvelles versions de jQuery).
Avant d'ajouter tout de glisser ou de tomber opération pour un événement que vous devez appeler cette fonction première:
simulateTouchEvents(<object>);
Vous pouvez également bloquer tous les composants/les enfants pour l'entrée ou pour accélérer la gestion des événements à l'aide de la syntaxe suivante:
simulateTouchEvents(<object>, true); // ignore events on childs
Voici le code que j'ai écrit. J'ai utilisé quelques astuces intéressantes pour accélérer l'évaluation de choses (voir le code).
function simulateTouchEvents(oo,bIgnoreChilds)
{
if( !$(oo)[0] )
{ return false; }
if( !window.__touchTypes )
{
window.__touchTypes = {touchstart:'mousedown',touchmove:'mousemove',touchend:'mouseup'};
window.__touchInputs = {INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,'input':1,'textarea':1,'select':1,'option':1};
}
$(oo).bind('touchstart touchmove touchend', function(ev)
{
var bSame = (ev.target == this);
if( bIgnoreChilds && !bSame )
{ return; }
var b = (!bSame && ev.target.__ajqmeclk), // Get if object is already tested or input type
e = ev.originalEvent;
if( b === true || !e.touches || e.touches.length > 1 || !window.__touchTypes[e.type] )
{ return; } //allow multi-touch gestures to work
var oEv = ( !bSame && typeof b != 'boolean')?$(ev.target).data('events'):false,
b = (!bSame)?(ev.target.__ajqmeclk = oEv?(oEv['click'] || oEv['mousedown'] || oEv['mouseup'] || oEv['mousemove']):false ):false;
if( b || window.__touchInputs[ev.target.tagName] )
{ return; } //allow default clicks to work (and on inputs)
// https://developer.mozilla.org/en/DOM/event.initMouseEvent for API
var touch = e.changedTouches[0], newEvent = document.createEvent("MouseEvent");
newEvent.initMouseEvent(window.__touchTypes[e.type], true, true, window, 1,
touch.screenX, touch.screenY,
touch.clientX, touch.clientY, false,
false, false, false, 0, null);
touch.target.dispatchEvent(newEvent);
e.preventDefault();
ev.stopImmediatePropagation();
ev.stopPropagation();
ev.preventDefault();
});
return true;
};
Ce qu'il fait:
Au premier abord, elle se traduit par touche unique d'événements en événements de souris. Il vérifie si un événement est causé par un élément dans l'élément qui doit être déplacé. Si il est un élément de saisie comme input, textarea, etc, il ignore la traduction, ou si un modèle de souris de l'événement est attaché à lui, il va également passer une traduction.
Résultat:
Chaque élément sur un élément déplaçable est encore à travailler.
Heureux de codage, greetz,
Erwin Haantjes