jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法

jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法

このコードをjQueryライブラリおよびjQuery UI関連のコードの後に追加して、タッチスクリーンに関するいくつかのプロパティを修正してください。

jQuery UIにTouch対応を追加(タッチ→マウス変換)

(function($){
  if (!('ontouchstart' in window)) return;

  var proto = $.ui.mouse.prototype;
  var _mouseInit = proto._mouseInit;

  $.extend(proto, {
    _mouseInit: function(){
      this.element.on("touchstart." + this.widgetName, $.proxy(this, "_touchStart"));
      _mouseInit.apply(this, arguments);
    },

    _touchStart: function(event){
      if (event.originalEvent.touches.length !== 1) return false;
      if (!this._mouseCapture(event, false)) return true;

      this.element
        .on("touchmove." + this.widgetName, $.proxy(this, "_touchMove"))
        .on("touchend." + this.widgetName, $.proxy(this, "_touchEnd"));

      this._modifyEvent(event);
      $(document).trigger("mouseup"); // 重置 mouseHandled
      this._mouseDown(event);
      return false;
    },

    _touchMove: function(event){
      this._modifyEvent(event);
      this._mouseMove(event);
    },

    _touchEnd: function(event){
      this.element
        .off("touchmove." + this.widgetName)
        .off("touchend." + this.widgetName);
      this._mouseUp(event);
    },

    _modifyEvent: function(event){
      var touch = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0];
      event.which = 1;
      event.pageX = touch.pageX;
      event.pageY = touch.pageY;
    }
  });
})(jQuery);

コード解説

  • このコードは、jQuery UI のウィジェット(draggable, sortable など)にタッチイベントを対応させるための拡張です。
  • jQuery UI はマウスイベント(mousedown, mousemove, mouseup)に依存していますが、スマートフォンやタブレットなどのタッチデバイスではマウスイベントが発生しません。
  • そこでこのコードでは、タッチイベントをマウスイベントに変換して jQuery UI に渡すことで、タッチ操作でも UI コンポーネントが正常に動作するようにしています。

注意点・補足

  • 単一指の操作のみ対応
  • touches.length === 1 によって、マルチタッチ操作は無効になります。ドラッグやリサイズのような単純な操作に限定されます。
  • ピンチや回転などの複雑なジェスチャーには非対応
  • マウスイベントに変換しているため、2本指操作や回転、長押しなどには対応していません。
  • jQuery UI の mouse プラグインが必要
  • このコードは jquery.ui.mouse.js の内部構造に依存しています。事前に読み込まれていないと機能しません。
  • 対応環境は古典的な jQuery + HTML 構成のみ
  • モダンなフレームワーク(Vue.js や React など)では非推奨。従来の jQuery ベースの画面に限定されます。
  • イベント名前空間に this.widgetName を使用
  • this.widgetName が設定されていない場合、.on() によるイベントバインドが失敗する可能性があります。
  • タッチの圧力や角度などの高度な情報は扱えない
  • あくまで「マウス操作の代替」として処理するため、シンプルな位置情報だけを使用します。

まとめ

このコードは、タッチイベント(touchstart / touchmove / touchend)をマウスイベントに変換することで、jQuery UI のコンポーネントがタッチデバイスでも動作できるようにする拡張です。

主な仕組み:

既存の _mouseDown, _mouseMove, _mouseUp をそのまま呼び出すことで動作をエミュレート

jQuery UI の mouse プラグインの初期化処理 _mouseInit をフック

タッチイベントの位置情報をマウスイベント風に加工

関連記事
JavaScriptでナビゲーション以外の場所をクリックしたらナビゲーションを閉じる
本コードは典型的なモバイル用サイドナビゲーションの実装例です。ボタンによる表示切替と、メニュー外クリック検知を組み合わせることで、ユーザー体験を向上させています。さらにESCキーでのメニュー閉鎖も可能にし、アクセシビリティも配慮しています。
Details
Details
2ヶ月前
JavaScriptでナビゲーション以外の場所をクリックしたらナビゲーションを閉じる
JSでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
autoCopyright(startYear, elementId) 関数は、指定した開始年から現在年までの著作権表記(例: "2020 - 2025")を自動生成し、指定されたHTML要素に表示します。
Details
Details
3ヶ月前
JSでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
ページ内の同じ種類のコンテナの高さを、最大値に合わせて統一する。
複数の同一クラス要素の高さを最大値に揃える処理をjQueryで実装。イベント発火時の多重処理を防ぐためデバウンスをかけ、動的なレイアウト変更に対応。効率的かつ堅牢な高さ統一が可能。
Details
Details
3ヶ月前
ページ内の同じ種類のコンテナの高さを、最大値に合わせて統一する。
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
はじめに Webサイトの表示速度や操作感は、単にコンテンツの量や見た目だけでなく、ブラウザがリソースをどのように読み込むかによっても大きく左右されます。特にJavaScriptや画像の読み込み順序、そしてそれらがどのように相互作用しているか […]
解構人
解構人
2ヶ月前
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
【CSS & JavaScript & SVG対応】円グラフ(扇形図)のアニメーション表現まとめ
はじめに 円グラフ(パイチャート)は、比率や構成比を視覚的に伝えるのに最適なUIコンポーネントです。最近、業務で使う機会があり、さまざまな方法でエフェクトをつけて表示する実装を試しました。 この記事では、以下の3パターンで実装する方法を紹介 […]
キウイフルーツ
キウイフルーツ
2ヶ月前
【CSS & JavaScript & SVG対応】円グラフ(扇形図)のアニメーション表現まとめ
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
このjQueryコードは、トグルボタンの状態に応じてナビゲーションを開閉し、背景のスクロールを動的に制御します。クラス名 back をトリガーとして、html 要素に適切なスタイルを適用し、快適なフルスクリーンUIを提供します。
Details
Details
3ヶ月前
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
ページ遷移の一般的な方法
本記事では、Webページにおけるページ遷移(リダイレクト)の一般的な実装方法について紹介しています。JavaScript、HTMLのメタタグ、PHP、ASPを用いたリダイレクト方法をそれぞれ具体的なコード例と共に解説しています。
Details
Details
3ヶ月前
ページ遷移の一般的な方法
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
2025年最新の画像遅延読み込み(Lazy Load)完全ガイド。ネイティブloading="lazy"とIntersectionObserverの使い分け・実装例・SEOやLCPへの最新対応ポイントまで徹底解説。パフォーマンスと検索順位アップのための必読ノウハウ!
aki0o0
aki0o0
3ヶ月前
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
固定ヘッダー対応!jQueryベースのアンカーリンク平滑スクロール+位置補正実装
固定ヘッダーで隠れない! ページ内リンクをクリックしてもスクロール先が見えない問題を、jQueryを使って滑らかに解決。スムーズスクロール+動的補正により、非同期コンテンツにも対応した実用的な実装コードを紹介します。
キウイフルーツ
キウイフルーツ
2ヶ月前
固定ヘッダー対応!jQueryベースのアンカーリンク平滑スクロール+位置補正実装
CSSによる絶対中央寄せ
実用性が高い方法順で7種類の実装方法を紹介 最も推奨されるのは Flexbox と Grid transform を使う方法はどんな要素にも応用可能 line-height や table-cell は特定用途向け JavaScript による制御も紹介されている
Details
Details
2ヶ月前
CSSによる絶対中央寄せ
JavaScriptでURL(パス)からファイル名を取得する
window.location.pathname でURLのパス部分を取得。 lastIndexOf('/') で最後のスラッシュ位置を検出。 substring でスラッシュの次から最後までを切り出し、ファイル名を抽出。
Details
Details
3ヶ月前
JavaScriptでURL(パス)からファイル名を取得する
スクロールに応じてアニメーション!jQueryで要素にクラスを追加する方法
jQuery を使ってページのスクロールイベントを監視し、特定の位置に到達した際に要素へ指定したクラスを追加することで、CSS アニメーションを利用した「要素の登場アニメーション」を実現できます。これはウェブデザインでよく使われる手法で、ページのインタラクション体験や視覚的な魅力を高める効果があります。
Details
Details
2ヶ月前
スクロールに応じてアニメーション!jQueryで要素にクラスを追加する方法
IT業界の初心者が知っておくべきの用語(2025版)
新しいテクノロジーについて話すとき、時々自分がみんなのペースについていけないと感じることはありませんか?あるいは、その業界にいるのに、自分はまだ十分ではないと感じ、多くの専門用語を理解しなければならないこともあるでしょう。
Details
Details
2ヶ月前
IT業界の初心者が知っておくべきの用語(2025版)
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
2025年6月最新版のTIOBEインデックスから、今人気のプログラミング言語を解説。Python、C、C++、Javaなどの注目度や、インデックスの活用方法も紹介します。
解構人
解構人
2ヶ月前
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
JavaScript を使って通貨形式を数値に変換する
JavaScriptの正規表現を利用し、通貨表記に含まれる無効な記号を取り除くことで、簡単に通貨文字列を数値に変換できます。これにより、数値計算や金額比較などが容易になります。
Details
Details
3ヶ月前
JavaScript を使って通貨形式を数値に変換する