10

Ich verwende diese lvlDragDrop plugin. Es funktioniert nicht auf der mobilen Plattform. Auf github haben sie diese issue hinzugefügt. Aber ich habe immer noch kein Glück.eckig Drag and Drop funktioniert nicht auf Handy

Github Demo

HTML

<div ng-controller="ddController" style="margin-top:50px;"> 
      <div class="row"> 
       <div class="col-md-1 col-md-offset-1"> 
        <p>Click and drag a color onto the grid to the right</p> 
        <div class="peg green" x-lvl-draggable="true" data-color="green">Green</div> 
        <div class="peg red" x-lvl-draggable="true" data-color="red">Red</div> 
        <div class="peg blue" x-lvl-draggable="true" data-color="blue">Blue</div> 
        <div class="peg black" x-lvl-draggable="true" data-color="black">Black</div> 
        <div class="peg grey" x-lvl-draggable="true" data-color="grey">Grey</div> 
       </div> 

       <div class="col-md-10"> 
        <div ng-repeat="r in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"> 
         <span class="slot circle" ng-repeat="c in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" x-lvl-drop-target="true" x-on-drop="dropped(dragEl, dropEl)"></span> 
        </div> 
       </div> 
      </div> 
     </div> 

JS

angular.module('ddApp', ['lvl.directives.dragdrop']) // register the directive with your app module 
      .controller('ddController', ['$scope' , function($scope){ 
       $scope.dropped = function(dragEl, dropEl) { // function referenced by the drop target 
        //this is application logic, for the demo we just want to color the grid squares 
        //the directive provides a native dom object, wrap with jqlite 
        var drop = angular.element(dropEl); 
        var drag = angular.element(dragEl); 

        //clear the previously applied color, if it exists 
        var bgClass = drop.attr('data-color'); 
        if (bgClass) { 
         drop.removeClass(bgClass); 
        } 

        //add the dragged color 
        bgClass = drag.attr("data-color"); 
        drop.addClass(bgClass); 
        drop.attr('data-color', bgClass); 

        //if element has been dragged from the grid, clear dragged color 
        if (drag.attr("x-lvl-drop-target")) { 
         drag.removeClass(bgClass); 
        } 
       } 
      }]); 

Antwort

8

Diese Richtlinie doesnt Unterstützung Touch-Screens. Wie auf GitHub erklärte:

Das größte Problem mit mobilen neu schreibt die Handler mit die verschiedenen Berührungsereignisse zu arbeiten. Es sollte machbar sein, aber ich habe nicht versucht.


Der Versuch, es zu justieren würde eine Verschwendung von Zeit. Es gibt andere Drag & Drop-Anweisungen, die Berührungsereignisse unterstützen. Sie können check out:

Alternativen:

angular-dragdrop

wohl bekanntesten. Hier sind some examples. Beachten Sie, dass sie nicht mit Touch-Geräten arbeiten. Um Touch-Ereignisse zu unterstützen, sollten Sie auch touchpunch.js hinzufügen.

ngDraggable

einfach und funktioniert auf dem Handy. Sie können ein Touch-fähiges Beispiel here sehen.

ng-sortable

Arbeiten auf dem Handy. Sie können das Touch-Beispiel here sehen.

+0

Jaquen sagte, es ist nicht in Touchscreen arbeiten –

0

Ich würde ein "Drag & Drop" Polyfill in Ihrer Anwendung hinzufügen. Wie dieser: https://github.com/Bernardo-Castilho/dragdroptouch

mit einem Polyfill bedeutet, dass Sie bereits etablierte Ereignisse in HTML (wie onDragStart und onDragEnd) verwenden. Dann können Sie die eingebauten Funktionen von Drag & Drop verwenden, wie es mit HTML gemeint war.

Hier ist ein guter Artikel darüber, warum Sie eine polyfill (geschrieben von demselben Autor des GitHub Repo in dieser Antwort verwiesen) verwenden sollte es https://www.codeproject.com/Articles/1091766/Add-support-for-standard-HTML-Drag-and-Drop-operat

installieren npm mit: npm install drag-drop-touch-polyfill und schließen Sie das Skript in Ihrem Anwendung.