2015-12-01 12 views
12

jQuery UIのソート可能なリストがあります。私はそれをモバイルデバイス上で動作させようとしています。タッチパンチの回避策を使用しました。スクロールするには、ソート可能な関数を非アクティブ化する必要があります。これを行い、リスト要素のタフォールドでソート可能な関数をアクティブにします。それは問題なく動作していますが、問題は、要素を並べ替えることができるようにタポールドに置いておきたいことです。今度は、このようにしか動作しません。要素(タポールドストップ)を止めてから、再度ソートする必要があります。Jquery UIでソート可能な、携帯用のドラッグアンドドラッグ

HTMLコード:

<ul class="list-group" id="wrapper"> 
<li class="list-group-item">Block 1</li> 
<li class="list-group-item">Block 2</li> 
<li class="list-group-item">Block 3</li> 
<li class="list-group-item">Block 4</li> 
<li class="list-group-item">Block 5</li> 
<li class="list-group-item">Block 6</li> 
<li class="list-group-item">Block 7</li> 
<li class="list-group-item">Block 8</li> 
<li class="list-group-item">Block 9</li> 
<li class="list-group-item">Block 10</li> 
<li class="list-group-item">Block 11</li> 
<li class="list-group-item">Block 12</li> 
<li class="list-group-item">Block 13</li> 
<li class="list-group-item">Block 14</li> 
<li class="list-group-item">Block 15</li> 
<li class="list-group-item">Block 16</li> 
<li class="list-group-item">Block 17</li> 
<li class="list-group-item">Block 18</li> 
<li class="list-group-item">Block 19</li> 
<li class="list-group-item">Block 20</li> 
<li class="list-group-item">Block 21</li> 
<li class="list-group-item">Block 22</li> 
<li class="list-group-item">Block 23</li> 
</ul> 

JSコード:ここ

$('#wrapper li').on('taphold', function(event, ui) { 
    $("#wrapper li").removeClass('selected'); 
    $("#wrapper").sortable({disabled:false}); 
    $(this).addClass('selected'); 
}); 

$("#wrapper").sortable({disabled:true,containment: "parent"}); 

$("#wrapper").on("sortupdate", function(event, ui) { 
    $("#wrapper").sortable({disabled:true}); 
}); 

は、例jsfiddle(https://jsfiddle.net/3cygah12/)です。

誰でもこの問題の解決方法を知っていますか?

+0

あなたはタッチイベント(http://www.javascriptkit.com/javatutors/touchevents.shtml)を実装する必要があります。しかし、ネット上でたくさんの例を見つけることができます。しかし、あなたはy軸上で作業しているので、あなたが設定する前に少なくとも1秒間タイマーを設定する必要があります(無効:偽)。スクロールしてアイテムをドラッグすると瞬間的になり、問題が発生する可能性があります。 – Tasos

+0

私はすでにそれを行っています。タップルやタッチスタートなどでドラッグを開始することができます。ソート可能にすることはできますが、関数が終了すると要素をドラッグできます。このタポールド(タッチスタート) - >ソート可能 - >タポールド(タッチスタート)ドラッグすることができます。 – Shile

+0

ええ、私はそれがどのように機能するのか知っています。私はあなたのQを見たときに私の携帯電話で試しました。私はJSタッチイベントについて何を意味するのかを見るためにX軸のアイテムをドラッグするために、それを逆にしてY軸だけで作業して、ジョブができるかどうかを調べることができます - http://stackoverflow.com/questions/29966181/jquery-touchswipe-event-on-element-prevents-scroll/29969575#29969575 – Tasos

答えて

11

のように全体のモバイルjQueryライブラリ(here)と仕事をダウンロードすることです。

Iは、タッチパンチ(http://touchpunch.furf.com/)tapholdするtouchstartを結合するこのようなコードの一部変性 -

mouseProto._mouseInit = function() { 

var self = this; 

// Delegate the touch handlers to the widget's element 
self.element 
    .bind('taphold', $.proxy(self, '_touchStart')) // IMPORTANT!MOD FOR TAPHOLD TO START SORTABLE 
    .bind('touchmove', $.proxy(self, '_touchMove')) 
    .bind('touchend', $.proxy(self, '_touchEnd')); 

// Call the original $.ui.mouse init method 
_mouseInit.call(self); 
}; 

を、またhttps://github.com/benmajor/jQuery-Touch-Eventsを用います。それは今働きます!

+0

良い仕事の仲間:) – Sidius

+1

それは私のために働いていない。私は 'jQuery UI Touch Punch 0.2.3'を使用しています。あなたが与えたコードを置き換えてください。また、私はあなたの与えられたgithubのリンクからタッチ・パンチの 'touch-mouse-events'の前に含めました。私は何を間違えているのですか? – locateganesh

+0

ねえ、あなたと同じ問題がありますが、jQuery Touch Eventsの使い方を完全に理解できていません。あなたのフィドルを変更したり、変更を加えて新しいものを投稿したりできますか? +1 – TheWandererr

9

私はこの小さなプラグインと同じ問題に対処:

http://touchpunch.furf.com/

があなたのスクリプトにこのライブラリを追加します。

それを行うための別の方法は、私はそれを行うことに成功し、この

$('#yourSelector').on('touchstart mousedown', function(event){ 
    event.preventDefault(); 
    var touch = event.touches[0]; 
if(touch){ 
    //Do some stuff 
} 
else { 
    //Do some other stuff 
} 
}); 
+0

あなたは何を意味するか説明できますか? – TheWandererr

+0

あなたのプログラムからあなたが望むものに依存します。 – Sidius

関連する問題