スマホ&タブレットとPCで別のJavaScriptを実行させる
JavaScriptでスマホ&タブレットとPCの判別は、ウィンドウサイズとユーザーエージェントで判別する方法があるが、ウィンドウサイズの方だとうまくいかなかったので今回はユーザーエージェントで判別する方法を。
スマホ&タブレットとPCの判別
$(function () {
const ua = navigator.userAgent;
if (ua.indexOf('iPhone') > -1 || (ua.indexOf('Android') > -1 && ua.indexOf('Mobile') > -1) || ua.indexOf('iPad') > -1 || ua.indexOf('Android') > -1) {
// スマホ&タブレット用イベント
$(".spoiler_info").stop().hide();
//ボタンのイベント
$(".spoilerBtn_info").on('click', function () {
$(this).next().stop().slideToggle();
$(this).toggleClass("active");
})
} else {
// PC用イベント
}
});
スマホ&タブレット判別ロジック
// iPhone でアクセスした場合
const ua = navigator.userAgent;
console.log(ua.indexOf('iPhone')); // 13
console.log(ua.indexOf('Android')); // -1
スマホ&タブレット判別ロジックは、UserAgent文字列に特例の文字列が含まれているかどうかで判断している。
.indexOf()メソッドを使用することによって、特定の文字列が含まれている場合を判断できるようになっている。
スマホやタブレットからアクセスされると必ず「-1」か「0」以上の数値が返ってくるので、「-1」より大きいかどうかで条件分岐すればOK。
また、.indexOf()ではなく.search()や.matchメソッドを使用しても大丈夫みたい。
省略形
const ua = navigator.userAgent;
const isSp = (ua.indexOf('iPhone') > -1 || (ua.indexOf('Android') > -1 && ua.indexOf('Mobile') > -1));
const isTablet = (ua.indexOf('iPad') > -1 || (ua.indexOf('Android') > -1 && ua.indexOf('Mobile') == -1));
const isPc = (! isSp && ! isTablet);
if (isSp) {
// スマホの処理
}
if (isTablet) {
// タブレットの処理
}
if (isPc) {
// PCの処理
}
「インドア生活のすすめ」の記事を参考にしました。