Повзунки jQuery UI на сенсорних пристроях


95

Я розробляю веб-сайт за допомогою інтерфейсу jQuery, і на моєму сайті є кілька елементів, які здаються несумісними при перегляді на сенсорних пристроях; вони не викликають жодних помилок, але поведінка не така, якою має бути.

Елементами, про які йдеться, є повзунки та повзунки діапазону, як визначено інтерфейсом jQuery; на сенсорному екрані, замість того, щоб реєструвати дотик як підхоплення ручки та перетягування як перетягування ручки по повзунку, він просто ковзає всю веб-сторінку в бік екрана. Це спрацьовує, якщо натиснути на ручку, а потім натиснути місце на повзунку, де потрібно, щоб опинилася ручка, але це дуже повільно і не ідеально. Якісь ідеї?

Я спробував завантажити плагін jqtouch, а потім приєднати .touch([...])до всіх викликів слайдер () та rangeslider (), але це не спрацювало.

Дякую!

ОНОВЛЕННЯ: Я знайшов цей "патч" на веб-сайті jQuery UI

http://bugs.jqueryui.com/ticket/4143

це означає, що це полегшує повзунок на iPhone, але тепер ще одне дурне запитання: як мені включити цей "патч" у свій код? Чи просто я включаю його на початку коду, як плагін?

Відповіді:


140

Здається, ця бібліотека пропонує те, що ви шукаєте:

https://github.com/furf/jquery-ui-touch-punch#readme

У ньому також є приклад використання коду (просто додайте плагін):

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
  $('#widget').draggable();
</script>

28
Зверніть увагу на маси: прикріпіть його до ручки повзуна, а не всю справу. (Для повзунка jQuery, який буде$('.ui-slider-handle').draggable();
— PaulSkinner

17
Тепер я можу переміщати ручку повзунка по всій сторінці !! Це смішно.
— dezman

Я можу переміщати ручку по всій сторінці у Firefox Mac. Мені цікаво, чи потрібно нам розміщувати умовний if (ipad | iphone) ... потім перетягувати ().
— Joe Hyde

13
Подряпайте мій оригінальний коментар вище. Це працює, просто включивши цей плагін до HEAD. Додайте <script src>, не додаючи $ (селектор) .draggable (); для роботи ручок повзунків.
— Джо Хайд,

6
Вам потрібно включити лише сценарій сенсорного удару і все. Як сказав @JoeHyde у своєму другому коментарі, немає необхідності викликати .draggable () для будь-якого елемента. Просто включіть сценарій, і він повинен працювати.
— Jack Vial

22

Просто хотів додати трохи нової інформації про це. Сенсорний удар добре працюватиме для Ipads та пристроїв Android. Але повзунок не працюватиме на мобільних пристроях Windows, наскільки я міг перевірити (з останніми версіями jquery ui & Touch punch)

Виправлення досить просте, просто додайте наступні правила CSS до дескриптора .ui-slider:

-ms-touch-action: none;
touch-action: none;

Сподіваюся, це допомагає


не працює у мене? будь-який приклад посилання, будь ласка @Stijn_d
— ShibinRagh

ну, але це руйнує функціонування власне сенсорного удару
— user151496

Це вирішило мою проблему. Дякую!
— parker_codes

Я також не працюю у мене на ноутбуці Dell із сенсорним екраном jsfiddle.net/jhtcqbqo
— Жан-Франсуа Бошан

6

Як запропонував @dazbradbury, бібліотека touchpunch може допомогти перекласти події миші на події дотику. Параметри в .draggable () обмежують рух повзунка, тому його неможливо перемістити за межі батьківського повзунка.

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
$(".ui-slider-handle").draggable({ 
    axis: "x",
    containment: "parent"
});
</script>

РЕДАГУВАТИ: Якщо ви вже використовуєте повзунок інтерфейсу користувача Jquery , вам потрібно включити лише бібліотеку сенсорних панелей. Не викликайте .draggable () для .ui-slider-handle, оскільки він перезапише існуючу функціональність.


Це змусило мене працювати. Єдина проблема в тому, що фонова область (коли встановлено діапазон: "хв") не підпорядковується позиції повзунка.
— викидання

Це має бути прийнятою відповіддю.
— націоналхімік

3

У мене була така ж проблема. Я розробив складну побудову інтерфейсу слайдера на повзунку інтерфейсу jQuery, лише зрозумівши, що це взагалі не працює на мобільному. Я спробував перелічені тут пропозиції, але оскільки у мене є власне рішення, яке базується лише на jQuery UI Slider, воно не спрацювало.

Просто використовуйте noUiSlider .

Він виконує всі складні функції (і багато іншого), як ту, яку я створив поверх повзунка інтерфейсу користувача jQuery. Він чудово працює на мобільних пристроях і його також легко стилізувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.