モバイルデバイスでのHTMLドラッグアンドドロップ


89

JavaScriptを使用してWebページにドラッグアンドドロップを追加する場合(jQuery UIドラッグ可能およびドロップ可能など)、これをモバイルデバイスのブラウザー経由で表示したときにどのように機能させるか-ドラッグ用のタッチスクリーンアクションがインターセプトされるページをスクロールするための電話など?

すべてのソリューションを歓迎します...私の最初の考えは次のとおりです:

  1. ドラッグするアイテムを「持ち上げ」て、アイテムをドロップしたいゾーンをクリックするようにするモバイルデバイス用のボタンがあります。

  2. モバイルデバイスでこれを行うアプリを作成して、Webページを動作させることはしないでください!

  3. あなたの提案やコメントをお願いします。


どのデバイスをターゲットにしていますか?
マルコ

22
@Marko-それらすべて。だれかを除外しても、それはWebではありません。
フェントン

jQueryがまったく不要
capriza /

回答:


101

jQuery UI Touch Punchはそれをすべて解決します。

これは、jQuery UIのタッチイベントサポートです。基本的に、タッチイベントをjQuery UIにワイヤリングするだけです。iPad、iPhone、Androidおよびその他のタッチ対応モバイルデバイスでテスト済み。私はjQuery UI sortableを使用しましたが、それは魅力のように機能します。

http://touchpunch.furf.com/


4
標準のAndroid 4.0ブラウザーでは機能しません。モバイルChromeでも動作します。
Timmmm

ドラッグする前に最初に長押ししますか?ドラッグ可能な要素で全幅を使用した場合は、一番下までスクロールしたいので、要素を自動的にドラッグします
CaffeineShots

1
特にあなたのhtmlファイルの頭の中でこれはあなたの最後の<script>宣言、jqueryの-UIを作ることを確認して、またはそれは動作しません
whyoz

@vichsu私の問題を完全に解決したこの回答に感謝します。
Brady Zhu 14

本当にアンドロイド4.0で動作していません..または回避策はありますか?
rashidnk

23

HTML5のドラッグアンドドロップがモバイルで利用できるように、タッチイベントをドラッグアンドドロップに変換するための新しいポリフィルがあります。

ポリフィルはこの投稿で Bernardo Castilhoによって紹介されました。

これがその投稿のデモです。

この投稿では、フォリーフィルの設計に関するいくつかの考慮事項も示しています。


7

Sencha Touchのベータ版はドラッグアンドドロップをサポートしています。

DnDの例を参照できます。ちなみに、これはWebkitブラウザでのみ機能します。

そのロジックをWebページに組み込むのはおそらく難しいでしょう。私が理解しているように、ブラウザのすべてのパンを無効にし、パンイベントを完全にJavaScriptで実装しているため、ドラッグアンドドロップを正しく解釈できます。

更新:元のサンプルリンクは無効ですが、この代替案を見つけました:https :
//github.com/kostysh/Drag-Drop-example-for-Sencha-Touch


これは非常に興味深いので、ダウンロードしてプレイします-Androidでテストされ、ほとんどの場合機能します。詳細を確認する必要があります-ありがとう!
フェントン

6
さて、私はおそらくそのライブラリを特に使用しません(縮小すると200kを超えるので)が、その中に含まれている概念を使用して、一種のアイデアを得ることができます。一般的なアイデアは、ページを画面のサイズよりも大きく解釈できないようにすることです。これにより、モバイルブラウザがスワイプやドラッグを妨害しないように騙されます。
フェントン、2010

1
Sohnee、ライブラリの未使用部分を削除するTouch 1.0のビルダーを追加します。これにより、フットプリントが大幅に削減されます。また、gzip圧縮された完全なライブラリは50〜80kです。
Michael Mullany、2010

7

デスクトップ、モバイル、Windows Phoneを含むタブレットで機能するドラッグアンドドロップ+ローテーションを作成する必要がありました。最後のものはそれをより複雑にしました(mspointer対touchイベント)。

解決策は、すばらしいGreensockライブラリから来ました

同じオブジェクトをドラッグおよび回転可能にするために、フープをジャンプする必要がありましたが、完全に機能しました


ライセンスの種類?自由?調べてみましたが、図書館が売っているようです。
ShanerM13

答えてから6年になります。ライセンスの種類を変更したかどうかはわかりません。以前は2014年に無料で利用できました...
Tomer Almog

IDKはこれを見落としましたが、greensock.com / licensing
ShanerM13

基本的に、製品が無料であるという条件で無料です(ただし、1回限りの料金が許可されている場合を除きます)。そうでない場合は、製品のビジネスライセンスを取得する必要があります。
ShanerM13

3

Tim Ruffleのドラッグアンドドロップポリフィルも試してみるとよいでしょう。確かにBernardo Castilho のドラッグと似ています(@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') {

「ロック解除」する各要素に必要な数のorを追加します

誰かを助けることを願っています


それは最も明確に私を助けてくれました、ありがとう。ソート可能なチェックリストを作成していて、タッチパンチで作成された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よりも高速に実行されていることを示すビデオテストを提示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.