jsTree перетащите на планшеты Android / Ipad - PullRequest
4 голосов
/ 27 февраля 2012

Я использую jsTree для перетаскивания элементов между несколькими древовидными представлениями. Это прекрасно работает на ПК, но не на планшетах (как Apple, так и Android). Я знаю, что JQueryUI не имеет встроенной поддержки DnD для планшетов, и я попробовал несколько доступных твиков, но ни один из них не сработал.

Можно ли использовать drag'n drop в jsTree на планшетах?

Спасибо!

1 Ответ

2 голосов
/ 11 мая 2012

Я исследую эту проблему уже несколько дней, уделяя основное внимание приобретению существующего веб-приложения, которое использует jsTree для работы на iPad.Используя jquery.ui.touch.js, я могу получить большую часть пути туда.События касания могут быть сопоставлены с событиями мыши, которых ожидает jstree, и дерево позволит мне перетаскивать, но цель отбрасывания никогда не распознается, и фактически функция drop_check никогда не вызывается.Так что это не совсем так.

Я думаю, что это может быть потому, что только некоторые из событий касания могут быть сопоставлены с событиями мыши, как jquery.ui.touch.js: touchstart = mousedown, touchmove = mousemove, touchend =MouseUp.Тем не менее, jstree также зависит от mouseenter и mouseleave для проверки цели удаления, и у меня нет событий для них.touchenter и touchleave уже обсуждались, но я не думаю, что браузер Safari на iPad запускает их на этом этапе.Я думал о том, чтобы попытаться сгенерировать события mouseenter и mouseleave из события touchmove, посмотрев на координаты и проверив их на перекрытие, но я еще не пробовал.


ОБНОВЛЕНИЕ: 18 мая2012. Я думаю, что это работает сейчас.Пара вещей отличается от того, что я думал.Большой прорыв произошел, когда я понял, что целевой элемент сенсорного события никогда не меняется от сенсорного запуска, через все сенсорные движения, к касанию.Событие mousemove, однако, ожидало, что элемент, который получает событие, является элементом, по которому вы перемещаетесь.Поэтому я изменил плагин для отправки события mousemove элементу с координатами в событии touchmove, и он работал как чемпион.Также оказалось, что, как только я это сделал, мне больше не нужно было вручную запускать события mouseenter и mouseleave, потому что jQuery позаботился об этом.

Контекстное меню правой кнопкой мыши (при касании) работало вмое простое приложение-тестер, но не в нашем веб-приложении, пока я не добавлю событие имитации мышки на правую кнопку после события контекстного меню.

Моя измененная версия jquery.ui.touch.js была загружена здесь:http://code.google.com/p/jquery-ui-for-ipad-and-iphone/issues/detail?id=18

...