10

Tôi đang sử dụng số lvlDragDrop plugin này. Nó không hoạt động trên nền tảng di động. Trên github họ đã thêm issue này. Nhưng tôi vẫn không có may mắn.Kéo và thả góc không hoạt động trên thiết bị di động

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); 
        } 
       } 
      }]); 

Trả lời

8

Chỉ thị này hỗ trợ doesnt màn hình cảm ứng. Như đã nêu trên GitHub:

Vấn đề lớn nhất với điện thoại di động là ghi lại các trình xử lý hoạt động với các sự kiện liên lạc khác nhau. Nó có thể thực hiện được, nhưng tôi đã không cố gắng .


Cố gắng điều chỉnh nó sẽ lãng phí thời gian của bạn. Còn có các chỉ thị kéo và thả khác hỗ trợ các sự kiện cảm ứng. Bạn có thể kiểm tra:

Alternatives:

angular-dragdrop

Có lẽ nổi tiếng nhất. Dưới đây là some examples. Lưu ý rằng họ không làm việc với các thiết bị cảm ứng. Để hỗ trợ các sự kiện chạm, bạn cũng nên thêm touchpunch.js.

ngDraggable

Đơn giản và hoạt động trên thiết bị di động. Bạn có thể xem ví dụ đã bật cảm ứng here.

ng-sortable

Hoạt động trên thiết bị di động. Bạn có thể xem ví dụ được bật cảm ứng here.

+0

Jaquen nói là đúng, nó sẽ không hoạt động trên màn hình cảm ứng –

0

Tôi sẽ thêm chèn "kéo và thả" trong ứng dụng của bạn. Như thế này: https://github.com/Bernardo-Castilho/dragdroptouch

sử dụng polyfill có nghĩa là bạn đang sử dụng các sự kiện đã được thiết lập trong html (chẳng hạn như onDragStart và onDragEnd). Sau đó, bạn có thể sử dụng các tính năng được xây dựng trong kéo và thả theo cách nó có ý nghĩa với html.

Đây là một bài viết tốt về lý do tại sao bạn nên sử dụng một polyfill (được viết bởi tác giả cùng của repo github tham chiếu trong câu trả lời này) https://www.codeproject.com/Articles/1091766/Add-support-for-standard-HTML-Drag-and-Drop-operat

Cài đặt nó bằng cách sử NPM: npm install drag-drop-touch-polyfill và bao gồm các kịch bản trong bạn ứng dụng.

Các vấn đề liên quan