a5hik / ng-sortable

AngularJS Library for Drag and Drop, supports Sortable and Draggable. Supports Touch devices.
http://a5hik.github.io/ng-sortable/
MIT License
1.15k stars 314 forks source link

Long Press option not working on mobile devices #356

Open prasannavalleti opened 7 years ago

vTrip commented 7 years ago

@a5hik any updates on this ?

princexebia commented 7 years ago

I am also facing same issue. On long press of Item my screen is getting reloaded :-(

mikey0000 commented 6 years ago

longTouch attribute never gets applied.

mikey0000 commented 6 years ago

going to use https://github.com/SortableJS/angular-legacy-sortablejs

iwanmcm commented 4 years ago

It didn't work for me, although the longTouch option was set to true.

I changed the bindDrag function in the ng-sortable.js file to bind longTouchStart and longTouchCancel to the 'touchstart' and 'touchend' events. Now the drag & drop also works on mobile for me.

Before change:

bindDrag = function () {
            if (hasTouch) {
              if (isLongTouch) {
                if (isIOS) {
                  element.bind('touchstart', longTouchStart);
                  element.bind('touchend', longTouchCancel);
                  element.bind('touchmove', longTouchCancel);
                } else {
                  element.bind('contextmenu', dragListen);
                }
              } else {
                element.bind('touchstart', dragListen);
              }
            }
            element.bind('mousedown', dragListen);
          };

After change:

bindDrag = function () {
              element.bind('touchstart', longTouchStart);
              element.bind('touchend', longTouchCancel);
              element.bind('touchmove', longTouchCancel);
              element.bind('contextmenu', dragListen);
              element.bind('touchstart', dragListen);
            element.bind('mousedown', dragListen);
          };

So it seems that some of touch events were bound only on iOS devices. Binding them on every device has solved the problem for me. Maybe there were changes in the events that the browsers produce.