jquery mobile de glisser et déposer

je joue avec la fonction drag and drop de jQuery UI et cela fonctionne sur mon site web, mais quand je navigue vers ma page web sur un iPad, alors les divs ne font pas drag - la page elle-même se déplace de haut en bas.

j'ai dans la tête de la balise:

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/le-frog/jquery-ui.css" type="text/css" media="all" />
<script src="http://www.google.com/jsapi"></script>
<script>
google.load("jquery", "1");
google.load("jqueryui", "1");
google.setOnLoadCallback(init);
</script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
31
demandé sur Phillip Senn 2011-03-18 00:56:34

4 réponses

Excellent exemple de solutions :

jQuery UI Touch Punch est un petit hack qui permet l'utilisation d'événements tactiles sur les sites en utilisant la bibliothèque d'interface utilisateur jQuery UI.

actuellement, interface utilisateur jQuery UI bibliothèque d'interface utilisateur ne supporte pas l'utilisation d'événements tactiles dans leurs widgets et interactions. Cela signifie que l'interface graphique que vous avez conçue et testée dans votre navigateur de bureau échouez sur la plupart, si ce n'est la totalité, des appareils mobiles tactiles, car jQuery UI écoute les événements de la souris-mouseover, mousemove et mouseout-not touch events-touchstart, touchmove et touchend.

C'est là que jQuery UI Touch Punch entre en jeu. Touch Punch fonctionne en utilisant simulated events pour map touch events à leurs analogues d'événements de souris. Il suffit d'inclure le script sur votre page et vos événements tactiles seront converties en leur événements de souris correspondants auxquels jQuery UI répondra comme prévu.

comme je l'ai dit, Touch Punch est un piratage. canard coups de poing certains de jQuery UI de base de la fonctionnalité pour gérer la cartographie des événements tactiles...

37
répondu Christophe LARATTE 2016-09-25 20:19:33

Ce problème est connu et a déjà été étudié.

il nécessite un appel correct .preventDefault() dans le gestionnaire d'événement droit.

Tout ce dont vous avez besoin est ici:

jQuery - images modulables sur iPad / iPhone - comment intégrer l'événement.preventDefault ();?

18
répondu naugtur 2017-05-23 12:18:17

http://ross.posterous.com/2008/08/19/iphone-touch-events-in-javascript / contient un excellent sniplet de code qui convertit les événements tactiles en événements de souris:

function touchHandler(event)
{
    var touches = event.changedTouches,
        first = touches[0],
        type = "";

         switch(event.type)
    {
        case "touchstart": type = "mousedown"; break;
        case "touchmove":  type="mousemove"; break;        
        case "touchend":   type="mouseup"; break;
        default: return;
    }

    // initMouseEvent(type, canBubble, cancelable, view, clickCount,
    //                screenX, screenY, clientX, clientY, ctrlKey,
    //                altKey, shiftKey, metaKey, button, relatedTarget);

    var simulatedEvent = document.createEvent("MouseEvent");
    simulatedEvent.initMouseEvent(type, true, true, window, 1,
                              first.screenX, first.screenY,
                              first.clientX, first.clientY, false,
                              false, false, false, 0/*left*/, null);

                                                                                 first.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);    
}
12
répondu Gili 2012-03-19 02:20:10

marteau.js fournit une puissante fonctionnalité glisser. https://github.com/EightMedia/hammer.js

4
répondu mohamagdy 2012-07-09 20:54:27