2012-03-03 4 views
31

Używam .draggable (część jQuery UI), aby umożliwić użytkownikom przenoszenie elementów w ramach prostej aplikacji internetowej. Działa dobrze na wszystkich najnowszych przeglądarkach komputerowych dla systemu OSX & Windows (z wyjątkiem Safari systemu Windows, gdzie z jakiegoś powodu przesuwa elementy tylko pionowo).jQuery UI Draggable nie działa na urządzeniach ios

Głównym problemem, jaki mam, jest to, że nie działa w przeglądarce Safari IOS (na której pierwotnie była kierowana aplikacja).

Czy istnieje przyczyna kompatybilności, która nie działa?

Czy istnieje inny sposób osiągnięcia tego samego efektu?

Witryna testowa, na której ją uruchomiono, to http://www.pudle.co.uk/mov/draggable.html, a także wykonałem jsfiddle - http://jsfiddle.net/t9Ecz/.

Każdy pomaga docenić, okrzyki.

Odpowiedz

55

Dotykowe urządzenia takie jak iPhone pozbawione są wszystkich typowych zdarzeń związanych z myszą, do których jesteśmy przyzwyczajeni w przeglądarkach komputerowych. Obejmuje to: mousemove, mousedown, mouseup, między innymi.

Tak, krótka odpowiedź, trzeba będzie korzystać z rozwiązania, które mają na uwadze „zdarzeń dotykowych” odpowiedników dla tych „zdarzeń myszy” powyżej: touchstart, touchmove, touchend lub touchcancel .

Spójrz na to: https://github.com/furf/jquery-ui-touch-punch

Możesz być zainteresowany jQuery mobile również.

Mam nadzieję, że to początek, w którym można znaleźć odpowiednie rozwiązanie dla własnych potrzeb.

+0

got it pracy, dzięki! – sam

+0

@sam Jakie podejście podążyłeś, aby to zadziałało? Teraz walczę z tym. –

+1

Myślę, że właśnie dołączyłem jq mobile, jeśli chcesz, tutaj są pliki, które grałem z https://www.dropbox.com/s/h7lej7ja3e2crbp/movable.zip – sam

13

Po prostu rozwiązałem ten problem, używając https://github.com/furf/jquery-ui-touch-punch, który był prawie idealnym rozwiązaniem, ale miałem problem z tym, że przeciągając mój element przeciągalny, ekran wciąż przewijał się nieprzewidywalnie, jeśli strona była większa niż okno podglądu.

I rozwiązać ten problem, zmuszając window.scrollTop & scrollLeft pozostać taka sama podczas przeciągania, tj:

var l_nScrollTop = $(window).scrollTop(); 
    var l_nScrollLeft = $(window).scrollLeft(); 
    $('#draggable_image').draggable({ 
     start: function() { 
      l_nScrollTop = $(window).scrollTop(); 
      l_nScrollLeft = $(window).scrollLeft(); 
     }, 
     drag: function() { 
      $(window).scrollTop(l_nScrollTop); 
      $(window).scrollLeft(l_nScrollLeft); 
     } 
    });