HTML перетягування на мобільних пристроях


89

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

Всі рішення вітаються ... мої початкові думки:

  1. Майте кнопку для мобільних пристроїв, яка "піднімає" предмет, який потрібно перетягнути, а потім змусьте їх натиснути зону, куди вони хочуть скинути предмет.

  2. Напишіть програму, яка робить це для мобільних пристроїв, а не намагайтеся, щоб веб-сторінка працювала на них!

  3. Ваші пропозиції та коментарі, будь ласка.


На які пристрої ви націлюєтесь?
Марко

22
@Marko - усі. Це не Інтернет, якщо я когось виключаю.
Фентон,

Якщо ви взагалі не хочете jQuery, загляньте на цей github.com/capriza/mobile-touch
oriharel

Відповіді:


101

jQuery UI Touch Punch просто вирішує все це.

Це підтримка сенсорних подій для інтерфейсу jQuery. В основному, це просто підключає подію дотику до інтерфейсу jQuery. Тестується на iPad, iPhone, Android та інших мобільних пристроях із підтримкою дотику. Я використовував jQuery UI для сортування, і це працює як шарм.

http://touchpunch.furf.com/


4
Не працює в стандартному браузері Android 4.0. Однак це працює на мобільному Chrome.
Timmmm,

ми довго натискаємо спочатку перед перетягуванням? тому що коли ми використовували повну ширину в елементі, який здатний перетягувати, тоді ми хочемо прокрутити вниз, він автоматично перетягує елемент
CaffeineShots

1
переконайтеся, що це ваша остання декларація <script> у голові вашого html-файлу, особливо jquery-ui, інакше це не спрацює
whyoz

@vichsu Щиро дякую за цю відповідь, яка просто ідеально вирішила мою проблему.
Brady Zhu

дійсно не працює в android 4.0 .. чи є якась робота навколо?
rashidnk

23

Існує новий поліфіл для перекладу подій дотику на перетягування, так що перетягування HTML5 Drag And Drop можна використовувати на мобільних пристроях.

Поліфайл був представлений Бернардо Кастільйо на цій посаді .

Ось демонстрація з цього допису.

У цій публікації також представлено декілька міркувань щодо конструкції фоліфлі.


7

Бета-версія Sencha Touch має підтримку перетягування.

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

Модернізація цієї логіки на веб-сторінці, мабуть, буде важкою. Наскільки я розумію, вони відключають усі панорамування браузера та реалізують події панорамування повністю у javascript, дозволяючи правильну інтерпретацію перетягування.

Оновлення: оригінальний приклад посилання мертвий, але я знайшов цю альтернативу:
https://github.com/kostysh/Drag-Drop-example-for-Sencha-Touch


Це дуже цікаво, тому я завантажу його та проведу гру - протестовано на Android, і вона в основному працює, тому потрібно лише поглянути на деталі - спасибі!
Fenton

6
Гаразд, я, мабуть, не буду користуватися цією бібліотекою (що, коли вона перевищує 200 тис. При зменшенні), але я можу використовувати концепції, що містяться в ній, щоб отримати ідею такого роду. Загальна ідея полягає в тому, що ви робите, що вашу сторінку не можна інтерпретувати як більшу за розмір екрану, що обманює мобільний браузер, не перехоплюючи пальців / перетягування!
Фентон,

1
Соні, ми додаємо конструктор для Touch 1.0, який видаляє невикористані частини бібліотеки, це істотно зменшить розмір. Крім того, gzipped, повна бібліотека становить 50-80k.
Michael Mullany

7

Мені потрібно було створити перетягування + обертання, яке працює на настільному ПК, мобільному телефоні, планшеті, включаючи Windows Phone. Останній ускладнив (mspointer проти сенсорних подій).

Рішення надійшло від великої бібліотеки Greensock

Потрібно було трохи стрибків через обручі, щоб зробити той самий об’єкт перетяжним і поворотним, але він працює ідеально


Тип ліцензії? Безкоштовно? Я перевірив сайт, але, схоже, вони продають бібліотеку.
ShanerM13

Минуло 6 років, як я відповів на це. Я не впевнений, що вони змінили тип ліцензії. Раніше це було безкоштовно ще в 2014 році ...
Томер Альмог,

IDK, як я це пропустив, але greensock.com/licensing
ShanerM13

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

3

Ви також можете спробувати полі- заповнювач перетягування, який , звичайно, схожий на той, що був у Бернардо Кастільйо (див. Відповідь @remdevtec).

Просто зробіть npm install mobile-drag-drop --save(доступні інші способи встановлення, наприклад, з водонагрівачем)

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


1

Jquery Touch Punch чудовий, але він також вимикає всі елементи керування на перетягуваному div, щоб запобігти цьому, вам доведеться змінити рядки ... (на момент написання - рядок 75)

змінити

if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])){

читати

if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0]) || event.originalEvent.target.localName === 'textarea'
        || event.originalEvent.target.localName === 'input' || event.originalEvent.target.localName === 'button' || event.originalEvent.target.localName === 'li'
        || event.originalEvent.target.localName === 'a'
        || event.originalEvent.target.localName === 'select' || event.originalEvent.target.localName === 'img') {

додати скільки завгодно ор для кожного з елементів, який потрібно "розблокувати"

Надія, що комусь допомагає


Мені це, безумовно, допомогло, дякую. Я створював сортувальний контрольний список, і галочка не клацала, оскільки div, створений сенсорним пуншем, закривав прапорець. Це вирішило це, і це спрацювало. спасибі ....
Mikeys4u

1

ось моє рішення:

$(el).on('touchstart', function(e) {
    var link = $(e.target.parentNode).closest('a')  
    if(link.length > 0) {
        window.location.href = link.attr('href');
    }
});

1

Бібліотека JS, що сортується , сумісна з сенсорними екранами і не вимагає jQuery.

Те, як він обробляє сенсорні екрани, означає, що вам потрібно торкнутися екрана приблизно 1 секунду, щоб почати перетягувати елемент.

Також вони представляють відеотест, який показує, що ця бібліотека працює швидше, ніж JQuery UI Sortable.

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