タッチデバイスのjQuery UIスライダー


95

jQuery UIを使用してWebサイトを開発していますが、タッチスクリーンデバイスで表示すると互換性がないように見えるサイトの要素がいくつかあります。エラーは発生しませんが、動作は本来あるべきものではありません。

問題の要素は、jQuery UIで定義されているスライダーと範囲スライダーです。タッチスクリーンでは、ハンドルをつかんでタッチを登録し、スライダーを横切ってハンドルをドラッグしてドラッグを登録する代わりに、Webページ全体を画面の端にスライドさせます。ハンドルをタップしてから、スライダーのハンドルを配置する場所をタップすると機能しますが、これは非常に遅く、理想的ではありません。何か案は?

jqtouchプラグインをダウンロードして、.touch([...])slider()とrangeslider()へのすべての呼び出しにアタッチしようとしましたが、うまくいきませんでした。

ありがとう!

更新:jQuery UI Webサイトでこの「パッチ」を見つけました

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 2013年

17
これで、ページ全体でスライダーハンドルを移動できます。ばかげてる。
dezman 2013年

Firefox Macではページ全体でハンドルを移動できます。条件付きのif(ipad | iphone)...次にdraggable()を配置する必要があるかどうか疑問に思っています。
ジョーハイド

13
上記の元のコメントをスクラッチします。これは、このプラグインをHEADに含めるだけで機能します。$(selector).draggable();を追加しないで<script src>を追加します。スライダーハンドルを機能させるため。
Joe Hyde

6
タッチパンチスクリプトを含めるだけで十分です。@JoeHydeが2番目のコメントで述べたように、どの要素でも.draggable()を呼び出す必要はありません。スクリプトを含めるだけで動作します。
ジャックバイアル2016年

22

これに関するいくつかの新しい情報を追加したかっただけです。タッチパンチはiPadsとAndroidデバイスで正常に動作します。しかし、私がテストできる限り、スライダーはWindowsモバイルデバイスでは機能しません(jquery uiとタッチパンチの最新バージョンで)

修正は非常に簡単です。次のCSSルールを.ui-slider-handleに追加するだけです。

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

お役に立てれば


私のために働いていませんか?リンクの例は@Stijn_d
ShibinRagh、

うーん、しかしこれは実際のタッチパンチの機能を台無しにします
user151496

これで問題が解決しました。ありがとう!
parker_codes 2017


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 UIスライダーを使用している場合は、タッチパンチライブラリを含めるだけで済みます。既存の機能が上書きされるため、.ui-slider-handleに対して.draggable()を呼び出さないでください。


これでうまくいきました。唯一の問題は、背景範囲(範囲: "min"が設定されている場合)がスライダーの位置に従っていないことです。
イジェクタメント

これは受け入れられる答えになるはずです。
イオン化学者

3

私も同じ問題を抱えていました。私はjQuery UIのスライダーをベースにした精巧なスライダーUIを開発しましたが、モバイルではまったく機能しないことに気づきました。ここにリストされた提案を試しましたが、jQuery UI Sliderのみに基づくカスタムソリューションがあるため、機能しませんでした。

noUiSliderを使用するだけです。

jQuery UIスライダーの上に構築したものと同じように、すべての精巧な機能(およびそれ以上)を実行します。モバイルデバイスで美しく機能し、スタイルも簡単です。

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