実現したいこと
ページ内リンクの際に、jQueryで固定ヘッダー分の高さを除きたいのですが、
サイトがレスポンシブサイトなので、PCとモバイルでヘッダーの高さが変わります。
そこで、ブラウザ幅によって条件分岐をして、それぞれのサイズで、異なる高さ分を除くように、
ifとelseの中で同一のコードをコピペして、ヘッダの高さのところだけ数値を変えてみました。
ちなみに、モバイルでは150px、PCでは120pxです。
実際のコードが下記になりますが、これで動作も一応OKとなっているのですが、
ほぼ同じコードを2回コピペしているところがあまりにも芸がない感じで、
もう少しすっきりした記述にしたいとかんがえます。
しかし、それにはどう書きなおしたらよいのかが分かりません。
なにかもっとうまい記述方法があれば、ぜひとも教えていただければと思います。
よろしくお願いいたします。
該当のソースコード
jquery
1if ((navigator.userAgent.indexOf('iPhone') > 0 && navigator.userAgent.indexOf('iPad') == -1) || navigator.userAgent.indexOf('iPod') > 0 || navigator.userAgent.indexOf('Android') > 0) { 2// ❶スマホのみに適用させるJavaScriptを記述 3jQuery(function($) { 4 var headerHight = 150; //ヘッダの高さ 5 $('a[href*=#]').click(function(){ 6 var speed = 200; 7 var href= $(this).attr('href'); 8 var url = location.protocol + '//' + location.hostname + location.pathname; 9 href = href.replace(url, ''); 10 var target = $(href == '#' || href == '' ? 'html' : href); 11 if( target.size() < 1 ) return true; 12 var position = target.offset().top-headerHight; 13 $('html, body').animate({scrollTop:position}, speed, 'swing'); 14 return false; 15 }); 16 }); 17} else { 18 19// ❷その他PC・タブレットに適用させるJavaScriptを記述 20jQuery(function($) { 21 var headerHight = 120; //ヘッダの高さ 22 $('a[href*=#]').click(function(){ 23 var speed = 200; 24 var href= $(this).attr('href'); 25 var url = location.protocol + '//' + location.hostname + location.pathname; 26 href = href.replace(url, ''); 27 var target = $(href == '#' || href == '' ? 'html' : href); 28 if( target.size() < 1 ) return true; 29 var position = target.offset().top-headerHight; 30 $('html, body').animate({scrollTop:position}, speed, 'swing'); 31 return false; 32 }); 33 }); 34} 35

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/05/22 07:34