スマホのブラウザで touchstart や touchmove、touchend イベントなどを監視することで各種タッチ処理やドラッグ、そしてスワイプといった操作を感知して処理することができます。
が、これらを使ってスワイプ(横にスライドさせるような処理)を感知しようとすると結構面倒だったりします。機種ごとの機能差についてはもちろんのこと、touchstart 時の指の場所と時間を記憶して、touchend 時の指の場所と時間を記憶し、「一定時間以内にほぼ横向きに指が移動した」ことを検知できればスワイプとみなす、といった具合に処理するわけですが、この「一定時間以内」とか、「ほぼ横向き」とか、厳密に処理するわけにもいかず、かと言ってどの程度の猶予をもたせて判断するべきか迷う要素もあったりするわけです。
そんなスワイプ処理を比較的簡単にハンドリングできるのが jQuery Mobile 内の1ファンクションである jQuery Swipe です:

実際に jQuery Swipe を使ってスワイプ判断をするサンプルを用意しました:
HTML はシンプルに(いらすとやの)画像を1つ画面に配置しているだけです。その画像に 'swipe' イベントが発生した場合に '#myimg swiped' という警告ダイアログが表示される、というものです。jQuery と jQuery Mobile は CDN を使ってロードしています。
このコードの肝になっているのはこの部分です:
'#myimg' は画像に付けられた id を指定しています。つまり画像に 'swipe' イベントが発生したら mySwipeHandler 関数を実行する、という指定をしています(そして mySwipeHandler 関数では警告ダイアログが表示されます)。
この 'swipe' イベントはデフォルトだと以下の条件で発生します:
つまりデフォルトではタッチ開始から終了(指を離す)まで1秒以内で、縦方向には30ピクセル以内の移動で横方向に30ピクセル以上移動するようなスワイプが発生した時に 'swipe' とみなし、そのイベントを発生させる、というものになります。変更したい場合は上述箇所を書き換えてください。
このページをアップロードし、スマホから表示するとこんな感じになります:

イラスト部分を右や左にスワイプするとイベントが発生して、警告メッセージが表示されます:

iPhone でも Android でも動いて楽ちん。もちろん画像以外の <div> などのパーツにも使えます。
なお、今回のサンプルでは jQuery 2.0.3 と jQuery Mobile 1.4.5 を使っています。jQuery は 2.x であれば動くようですが、3.x だとエラーになるっぽいです(ここになかなか気づけずハマりました):
https://stackoverflow.com/questions/40172264/jquery-swipe-event-does-not-work-with-jquery-3
が、これらを使ってスワイプ(横にスライドさせるような処理)を感知しようとすると結構面倒だったりします。機種ごとの機能差についてはもちろんのこと、touchstart 時の指の場所と時間を記憶して、touchend 時の指の場所と時間を記憶し、「一定時間以内にほぼ横向きに指が移動した」ことを検知できればスワイプとみなす、といった具合に処理するわけですが、この「一定時間以内」とか、「ほぼ横向き」とか、厳密に処理するわけにもいかず、かと言ってどの程度の猶予をもたせて判断するべきか迷う要素もあったりするわけです。
そんなスワイプ処理を比較的簡単にハンドリングできるのが jQuery Mobile 内の1ファンクションである jQuery Swipe です:

実際に jQuery Swipe を使ってスワイプ判断をするサンプルを用意しました:
<html> <head> <meta charset="utf8"/> <title>swipe</title> <script type="text/javascript" src="https://code.jquery.com/jquery-2.0.3.min.js"></script> <script type="text/javascript" src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> <script> $(function(){ $('#myimg').on( 'swipe', mySwipeHandler ); function mySwipeHandler( evt ){ alert( '#myimg swiped.' ); } }); </script> </head> <body> <img src="https://2.bp.blogspot.com/-hvxUlVBfZUI/XG4Ga7pkzxI/AAAAAAABRrE/Q2vhHjh76T8tFTyZ7D8fFE3MCQMqiKIVgCLcBGAs/s450/champion_belt_boxing_man.png" id="myimg" width="50%"/> </body> </html>
HTML はシンプルに(いらすとやの)画像を1つ画面に配置しているだけです。その画像に 'swipe' イベントが発生した場合に '#myimg swiped' という警告ダイアログが表示される、というものです。jQuery と jQuery Mobile は CDN を使ってロードしています。
このコードの肝になっているのはこの部分です:
$('#myimg').on( 'swipe', mySwipeHandler );
'#myimg' は画像に付けられた id を指定しています。つまり画像に 'swipe' イベントが発生したら mySwipeHandler 関数を実行する、という指定をしています(そして mySwipeHandler 関数では警告ダイアログが表示されます)。
この 'swipe' イベントはデフォルトだと以下の条件で発生します:
条件 | デフォルト値 | カスタマイズする場合の設定箇所 |
---|---|---|
スワイプにかかる時間 | 1000ms | $.event.special.swipe.durationThreshold |
横方向の移動ピクセル | 30ピクセル以上 | $.event.special.swipe.horizontalDistanceThreshold |
縦方向の移動ピクセル | 30ピクセル以内 | $.event.special.swipe.verticalDistanceThreshold |
つまりデフォルトではタッチ開始から終了(指を離す)まで1秒以内で、縦方向には30ピクセル以内の移動で横方向に30ピクセル以上移動するようなスワイプが発生した時に 'swipe' とみなし、そのイベントを発生させる、というものになります。変更したい場合は上述箇所を書き換えてください。
このページをアップロードし、スマホから表示するとこんな感じになります:

イラスト部分を右や左にスワイプするとイベントが発生して、警告メッセージが表示されます:

iPhone でも Android でも動いて楽ちん。もちろん画像以外の <div> などのパーツにも使えます。
なお、今回のサンプルでは jQuery 2.0.3 と jQuery Mobile 1.4.5 を使っています。jQuery は 2.x であれば動くようですが、3.x だとエラーになるっぽいです(ここになかなか気づけずハマりました):
https://stackoverflow.com/questions/40172264/jquery-swipe-event-does-not-work-with-jquery-3