114

draggable()FirefoxとChromeで動作するjQueryUIがあります。ユーザーインターフェイスの概念は、基本的にクリックして「ポストイット」タイプのアイテムを作成することです。

div#everything基本的に、クリックをリッスンする(100%高さと幅)をクリックまたはタップすると、入力テキストエリアが表示されます。テキストを追加し、完了すると保存されます。この要素をドラッグできます。これは通常のブラウザでは機能しますが、iPadではアイテムをドラッグできずにテストできます。タッチして選択すると(少し暗くなります)、ドラッグできません。左右にドラッグすることはありません。上下にドラッグできますが、個人をドラッグするのではなく、Webページdiv全体をドラッグします。

クリックをキャプチャするために使用するコードは次のとおりです。

$('#everything').bind('click', function(e){
    var elem = document.createElement('DIV');
    STATE.top = e.pageY;
    STATE.left = e.pageX;
    var e = $(elem).css({
        top: STATE.top,
        left: STATE.left
    }).html('<textarea></textarea>')
    .addClass('instance')
    .bind('click', function(event){
        return false;
    });
    $(this).append(e);
});

そして、これが私がメモを「保存」し、入力divを単なる表示divに変えるために使用するコードです。

$('textarea').live('mouseleave', function(){
    var val = jQuery.trim($(this).val());
    STATE.content = val;
    if (val == '') {
        $(this).parent().remove();
    } else {
        var div  = $(this).parent();
        div.text(val).css({
            height: '30px'
        });
        STATE.height = 30;
        if ( div.width() !== div[0].clientWidth || div.height () !== div[0].clientHeight ) {
            while (div.width() !== div[0].clientWidth || div.height () !== div[0].clientHeight) {
                var h = div.height() + 10;
                STATE.height = h;
                div.css({
                    height: (h) + 'px'
                });     // element just got scrollbars
            }
        }
        STATE.guid = uniqueID()
        div.addClass('savedNote').attr('id', STATE.guid).draggable({
            stop: function() {
                var offset = $(this).offset();
                STATE.guid = $(this).attr('id');
                STATE.top = offset.top;
                STATE.left = offset.left;
                STATE.content = $(this).text();
                STATE.height = $(this).height();
                STATE.save();
            }
        });
        STATE.save();
        $(this).remove();
    }
});

そして、保存されたメモのページをロードすると、次のコードが表示されます。

$('.savedNote').draggable({
    stop: function() {
        STATE.guid = $(this).attr('id');
        var offset = $(this).offset();
        STATE.top = offset.top;
        STATE.left = offset.left;
        STATE.content = $(this).text();
        STATE.height = $(this).height();
        STATE.save();
    }
});

私のSTATEオブジェクトはメモの保存を処理します。

オンロード、これはhtml本体全体です:

<body> 
    <div id="everything"></div> 
<div class="instance savedNote" id="iddd1b0969-c634-8876-75a9-b274ff87186b" style="top:134px;left:715px;height:30px;">Whatever dude</div> 
<div class="instance savedNote" id="id8a129f06-7d0c-3cb3-9212-0f38a8445700" style="top:131px;left:347px;height:30px;">Appointment 11:45am</div> 
<div class="instance savedNote" id="ide92e3d13-afe8-79d7-bc03-818d4c7a471f" style="top:144px;left:65px;height:80px;">What do you think of a board where you can add writing as much as possible?</div> 
<div class="instance savedNote" id="idef7fe420-4c19-cfec-36b6-272f1e9b5df5" style="top:301px;left:534px;height:30px;">This was submitted</div> 
<div class="instance savedNote" id="id93b3b56f-5e23-1bd1-ddc1-9be41f1efb44" style="top:390px;left:217px;height:30px;">Hello world from iPad.</div> 

</body>

だから、私の質問は本当にです:どうすればこれをiPadでより良く機能させることができますか?

私はjQueryUIに設定されていません、これがjQuery UIまたはjQueryで間違っていることなのか、それともクロスプラットフォーム/下位互換性のあるdraggable()要素を実行するためのより良いフレームワークがあるのか​​疑問に思っていますタッチスクリーンUIで動作します。

このようなUIコンポーネントの記述方法に関するより一般的なコメントも歓迎します。

ありがとう!


更新: これをjQuery UIdraggable()呼び出しに単純にチェーンして、iPadで正しいドラッグ可能性を取得することができました!

.touch({
    animate: false,
    sticky: false,
    dragx: true,
    dragy: true,
    rotate: false,
    resort: true,
    scale: false
});

jQuery Touchプラグインがそのトリックを実行しました!

4

7 に答える 7

143

何時間も無駄にした後、これに出くわしました!

jquery-ui-touch-punch

タップイベントをクリックイベントとして変換します。jqueryの後にスクリプトをロードすることを忘れないでください。

私はこれをiPadとiPhoneで動作させました

$('#movable').draggable({containment: "parent"});
于 2012-02-07T10:34:27.297 に答える
62

注意:この回答は2010年に作成されたものであり、テクノロジーは急速に進歩しています。より最近の解決策については、以下の@ctrl-alt-dileepの回答を参照してください。


必要に応じて、jQuerytouchプラグインを試してみることをお勧めします。ここで例を試すことができます。iPhoneでドラッグするのは問題ありませんが、jQueryUIDraggableは機能しません。

または、このプラグインを試すこともできますが、実際に独自のドラッグ可能な関数を作成する必要がある場合があります。

補足として:信じられないかもしれませんが、iPadやiPhoneなどのタッチデバイスが、:hover/onmouseover機能を使用するWebサイトとドラッグ可能なコンテンツの両方で問題を引き起こしているという話題が増えています。

このための基礎となるソリューションに興味がある場合は、3つの新しいJavaScriptイベントを使用することです。ontouchstart、ontouchmove、ontouchend。Appleは実際にそれらの使用についての記事を書いています。それはここで見つけることができます。簡単な例はここにあります。これらのイベントは、リンクした両方のプラグインで使用されます。

于 2010-06-15T06:18:45.427 に答える
24

このプロジェクトは役立つはずです-jQueryUIが変更なしでiPadとiPhoneで動作できるように、タッチイベントをクリックイベントにマップします。JSを既存のプロジェクトに追加するだけです。

http://code.google.com/p/jquery-ui-for-ipad-and-iphone/

于 2010-09-02T03:45:06.693 に答える
7

jQueryui1.9がこれを処理します。プレのデモは次のとおりです。

https://dl.dropbox.com/u/3872624/lab/touch/index.html

jquery.mouse.ui.jsを取り出して、ロードしているjQuery uiファイルの下に貼り付けるだけで、これですべてです。並べ替えにも使用できます。

このコードは私にとってはうまく機能していますが、エラーが発生した場合は、jquery.mouse.ui.jsの更新バージョンが次の場所にあります。

Jquery-ui sortableは、AndroidまたはIOSに基づくタッチデバイスでは機能しません

于 2011-08-30T18:31:14.507 に答える
4

githubのこのプロジェクトはあなたの解決策かもしれません

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

于 2012-07-09T02:03:58.610 に答える
2

私は昨日同様の問題に苦しんでいました。他の回答で言及されているjQueryTouchPunchと一緒にjQueryUIのドラッグ可能を使用する「実用的な」ソリューションはすでにありました。ただし、このメソッドを使用すると、一部のAndroidデバイスで奇妙なバグが発生するため、偽のマウスイベントをエミュレートするメソッドを使用する代わりに、タッチイベントを使用してHTML要素をドラッグ可能にする小さなjQueryプラグインを作成することにしました。

この結果がjQueryDraggableTouchです。これは、要素をドラッグ可能にするためのシンプルなjQueryプラグインであり、タッチイベント(touchstart、touchmove、touchendなど)を使用してタッチデバイスをメインターゲットとして使用します。ブラウザ/デバイスがタッチイベントをサポートしていない場合でも、マウスイベントを使用するフォールバックがあります。

于 2013-02-06T16:55:55.773 に答える
2

jquery.pep.jsを使用してみることができます:

jquery.pep.jsは、DOM要素をドラッグ可能なオブジェクトに変換する軽量のjQueryプラグインです。古いものから新しいものまで、タッチからクリックまで、ほとんどすべてのブラウザで機能します。jQuery UIのドラッグ可能オブジェクトがタッチデバイスでは機能しなかったため(ハッカーなしで)機能しなかったというニーズに応えるために構築しました。

ウェブサイトGitHubリンク

于 2014-10-14T13:42:24.360 に答える