jQueryでスムーススクロールを作っています。
スマホ用画面(ハンバーガーメニュー使用)ではスムーススクロールできましたが、
PC用画面(左にコンテンツ、右にメニューの2カラム)ではうまくいきません。
画面サイズを取得して場合分けし、
スマホの時は通常のスムーススクロール、
PCの時は下記ページで紹介されているoverflow:scroll内をスムーススクロールする方法にしています。
https://blog.webcreativepark.net/2015/12/16-054605.html
結果、overflowにスムーススクロールを入れるとアンカーリンクが機能しないという事態は解消したものの、
スムーススクロールはしません。
確認したブラウザは
Firefox、Google Chrome、Microsoft Edge
で、結果はすべて、自分のページではうまくいかず紹介ページのデモはきれいに見れています。
ソースは下記のとおりです。
html
1<div class="wrapper clearfix"> 2 <!-- 左カラム --> 3 <div class="left" class="scroll"> 4 <!-- コンテンツ --> 5 <div class="contents"> 6 <div class="box" id="area-1"> 7 <h2>コンテンツ1</h2> 8 <p>本文が入ります。</p> 9 </div> 10 11 <div class="box" id="area-2"> 12 <h2>コンテンツ2</h2> 13 <h3>項目1</h3> 14 <p>本文が入ります。</p> 15 <p>本文が入ります。</p> 16 <p>本文が入ります。</p> 17 <h3>項目2</h3> 18 <p>本文が入ります。</p> 19 <p>本文が入ります。</p> 20 <p>本文が入ります。</p> 21 </div> 22 23 <div class="box" id="area-3"> 24 <h2>コンテンツ3</h2> 25 <p>本文が入ります。</p> 26 <p>本文が入ります。</p> 27 <p>本文が入ります。</p> 28 </div> 29 30 <div class="box" id="area-4"> 31 <h2>コンテンツ4</h2> 32 <h3>項目1</h3> 33 <p>本文が入ります。</p> 34 <p>本文が入ります。</p> 35 <p>本文が入ります。</p> 36 <h3>項目2</h3> 37 <p>本文が入ります。</p> 38 <p>本文が入ります。</p> 39 <p>本文が入ります。</p> 40 </div> 41 </div><!-- コンテンツ --> 42 <!-- フッター クレジット --> 43 <footer class="footer"><p>フッター<br>クレジット</p></footer> 44 </div><!-- 左カラム --> 45 <!-- 右カラム --> 46 <div class="right"> 47 <!-- ヘッダー サイト名 --> 48 <header class="header"> 49 <h1><a href="index.html">ページタイトル</a></h1> 50 </header> 51 <!-- メニュー--> 52 <div id="menubtn"> 53 <i class="fas fa-bars"></i> 54 </div> 55 <nav class="menu" id="menu"> 56 <ul> 57 <a href="#area-1" data-box=".scroll"><li>メニュー1</li></a> 58 <a href="#area-2" data-box=".scroll"><li>メニュー2</li></a> 59 <a href="#area-3" data-box=".scroll"><li>メニュー3</li></a> 60 <a href="#area-4" data-box=".scroll"><li>メニュー4</li></a> 61 </ul> 62 </nav> 63 </div><!-- 右カラム --> 64</div>
css
1@charset "UTF-8"; 2html{ 3 height: 100%; 4} 5*, *::before, *::after{ 6 box-sizing: border-box; 7} 8body{ 9 line-height: 1.5; 10} 11h2{ 12 color: #fff; 13 text-align: center; 14 background-color: #ccc; 15 position: absolute; 16 top: -50px; 17 right: 20px; 18 width: 50%; 19 transform: rotate(10deg); 20} 21a:hover{ 22 opacity: 0.6; 23} 24.clearfix::after{ 25 content: ''; 26 display: block; 27 clear: both; 28} 29/*コンテンツ*/ 30.box{ 31 position: relative; 32 margin: 100px 30px; 33 padding: 30px 30px; 34 background-color: #fff; 35 border-radius: 10px; 36} 37/*フッター クレジット*/ 38.footer{ 39 text-align: center; 40} 41 42/* -------------------------------- 43 * 768px~ 44 * -------------------------------- */ 45 @media (min-width:768px) { 46 body{ 47 background: url('../img/bg.jpg') no-repeat; 48 background-size: cover; 49 background-position:center; 50 } 51 /*2カラムレイアウト*/ 52 .wrapper{ 53 position: fixed; 54 margin: 0 10%; 55 width: 80%; 56 height: 100%; 57 } 58 .left{ 59 float: left; 60 width: 75%; 61 height: 100%; 62 background-color: rgba(255, 255, 255, 0.6); 63 overflow-y: auto; 64 } 65 .right{ 66 float: left; 67 width: 25%; 68 height: 100%; 69 } 70 /*ヘッダー サイト名*/ 71 .header{ 72 height: 50%; 73 padding: 10px; 74 } 75 /*メニュー*/ 76 #menubtn{ 77 display: none; 78 } 79 .menu{ 80 width: 150px; 81 } 82 .menu li{ 83 display: block; 84 margin: 10px 0; 85 padding: 10px; 86 width: 150px; 87 background-color: #fff; 88 text-align: center; 89 } 90 } 91 92 /* -------------------------------- 93 * ~767px 94 * -------------------------------- */ 95@media (max-width:767px) { 96 body::before{ 97 position: fixed; 98 content: ''; 99 background: url('../img/bg.jpg') no-repeat; 100 background-size: cover; 101 background-position:center; 102 width: 100%; 103 height: 100%; 104 } 105 /*レイアウト*/ 106 .right{ 107 position: absolute; 108 top: 0; 109 left: 0; 110 } 111 .left{ 112 position: absolute; 113 top: 100px; 114 left: 0; 115 width: 100%; 116 } 117 /*ヘッダー サイト名*/ 118 .header{ 119 padding: 0 20px; 120 } 121 .header a{ 122 color: #fff; 123 } 124 /*メニュー*/ 125 #menubtn{ 126 position: fixed; 127 top: 10px; 128 right: 10px; 129 padding: 5px; 130 width: 40px; 131 height: 40px; 132 text-align: center; 133 background-color: #ccc; 134 border-radius: 8px; 135 border: 1px solid #000; 136 z-index: 1; 137 } 138 #menubtn i{ 139 font-size: 30px; 140 } 141 .menu{ 142 display: none; 143 position: fixed; 144 top: 0; 145 right: 0; 146 padding-top: 60px; 147 width: 100%; 148 background-color: #ccc; 149 } 150 .menu li{ 151 padding: 10px; 152 text-align: right; 153 } 154 /*コンテンツ*/ 155 .box{ 156 margin: 30px 5px 60px; 157 padding: 20px; 158 padding-top: 35px; 159 } 160}
js
1$(function() { 2 // ハンバーガーメニュー 3 $("#menubtn").click(function(){ 4 $("#menu").slideToggle(); 5 }); 6 // アンカーリンク 7 $("a[href^='#']").click(function(){ 8 // 画面幅wideを取得 9 var wide = $(window).width(); 10 // if文で条件を比較(画面幅が767より小さいとき) 11 if (wide < 767) { 12 var adjust = -50; 13 var speed = 400; 14 var href= $(this).attr("href"); 15 var target = $(href == "#" || href == "" ? 'html' : href); 16 var position = target.offset().top + adjust; 17 $('body,html').stop().animate({scrollTop:position}, speed, 'swing'); 18 return false;} 19 // 画面幅が767より大きいとき 20 else { 21 var adjust = -50; 22 var speed = 400; 23 var $box = $($(this).data("box")); 24 var $tareget = $($(this).attr("href")); 25 var dist = $tareget.position().top - $box.position().top; 26 $box.stop().animate({scrollTop: $box.scrollTop() + dist + adjust}, speed, 'swing'); 27 return false;} 28 }); 29});
その他なにか必要な情報がありましたら追記いたします。

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