【jQuer】ボタンを固定し指定の場所までスクロールさせる方法
2021年10月29日
CODE
この記事のURLとタイトルをコピーする
ボタンを固定し、クリックすると指定の場所までスクロールさせる備忘録です。
ブラウザの右下にボタンを固定させ、ボタンをクリックすると指定の場所までスムーススクロールします。
固定したボタンはjQueryで表示範囲を指定し、指定範囲外になると非表示になります。
今回は1番下にある「Area4」をスクロール先に指定しています。
LPなどの1枚ものを想定し、1番下にフォームなどのCVさせたいコンテンツがあると仮定しています。
ボタンを作るためのHTMLを
bodyタグ内に記述します。
DEMOサイトでは、footerタグ内に置いています。
スクロール先のsectionタグには、ID名とclass名を指定します。
ID名はボタンのスクロール先の指定として
aタグに置きます。
class名はjQueryで画面左上からArea4までの距離を取得する際に使用します。
PCでは
position: fixed;で右下に固定。
スマホではwidth: 100%;で帯のように固定しています。
ボタンを下からふわっと表示させたかったので#page-linkにtransform: translateY(100px);で位置を下にずらし、opacity: 0;で透過に。
@keyframesでアニメーションを設定しました。
スクロール先のArea4が、ブラウザの可視範囲に入ったらボタンを非表示にします。
12行目$(window).height();でウィンドウの高さを取得し変数windowHeightに、13行目ではArea4までの距離を取得して変数entryPosに入れています。
14行目のif文でentryPosのみだと「Area4がブラウザのトップにたどり着いたときにボタンを非表示」にします。
entryPos – windowHeightでウィンドウの高さを引いてあげると、「可視範囲に入ったときに非表示」にすることができます。
今回は後者を実装したかったので、if (scroll <= entryPos - windowHeight)で記述しました。
サイトに合わせて、ぜひカスタマイズしてみてください!
ブラウザの右下にボタンを固定させ、ボタンをクリックすると指定の場所までスムーススクロールします。
固定したボタンはjQueryで表示範囲を指定し、指定範囲外になると非表示になります。
今回は1番下にある「Area4」をスクロール先に指定しています。
LPなどの1枚ものを想定し、1番下にフォームなどのCVさせたいコンテンツがあると仮定しています。
ボタンを設置
HTML・CSS・jQueryのファイルを用意します。HTML
1 |
<p id="page-link"><a href="#area4">Area4はこちら</a></p> |
DEMOサイトでは、footerタグ内に置いています。
スクロール先のsectionタグには、ID名とclass名を指定します。
1 2 3 |
<section id="area4" class="areaScroll"> </section> |
class名はjQueryで画面左上からArea4までの距離を取得する際に使用します。
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#page-link { position: fixed; right: 10px; bottom: 20px; z-index: 2; opacity: 0; transform: translateY(100px); } #page-link a { display: flex; align-items: center; background: #014785; border-radius: 3px; height: 60px; color: #fff; text-transform: uppercase; text-decoration: none; font-size: 15px; padding: 0 20px; transition: all 0.3s; } #page-link a::after { content: ""; width: 6px; height: 6px; border-top: 2px solid #fff; border-right: 2px solid #fff; transform: rotate(130deg); margin-left: 6px; margin-bottom: 5px; } #page-link a:hover { background: #002B50; } #page-link.upMove{ animation: UpAnime 0.5s forwards; } @keyframes UpAnime{ from { opacity: 0; transform: translateY(100px); } to { opacity: 1; transform: translateY(0); } } #page-link.downMove{ animation: DownAnime 0.5s forwards; } @keyframes DownAnime{ from { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(100px); } } @media all and (max-width: 767px) { #page-link { width: 100%; right: 0; bottom: 0; } #page-link a { border-radius: 0; justify-content: center; } } |
スマホではwidth: 100%;で帯のように固定しています。
ボタンを下からふわっと表示させたかったので#page-linkにtransform: translateY(100px);で位置を下にずらし、opacity: 0;で透過に。
@keyframesでアニメーションを設定しました。
jQuery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// ページスクロール $('#page-link a[href*="#"]').click(function () { var elmHash = $(this).attr('href'); var pos = $(elmHash).offset().top; $('body,html').animate({scrollTop: pos}, 500); return false; }); //フォーム固定ボタン function PageScrollAnime() { var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); var entryPos = $("areaScroll").offset().top; if (scroll <= entryPos - windowHeight){ $('#page-link').removeClass('downMove'); $('#page-link').addClass('upMove'); }else{ if($('#page-link').hasClass('upMove')){ $('#page-link').removeClass('upMove'); $('#page-link').addClass('downMove'); } } } $(window).scroll(function () { PageScrollAnime(); }); $(window).on('load', function () { PageScrollAnime(); }); |
12行目$(window).height();でウィンドウの高さを取得し変数windowHeightに、13行目ではArea4までの距離を取得して変数entryPosに入れています。
14行目のif文でentryPosのみだと「Area4がブラウザのトップにたどり着いたときにボタンを非表示」にします。
entryPos – windowHeightでウィンドウの高さを引いてあげると、「可視範囲に入ったときに非表示」にすることができます。
今回は後者を実装したかったので、if (scroll <= entryPos - windowHeight)で記述しました。
まとめ
jQueryの表示範囲をより詳しく設定してあげると、「特定のエリアのみにボタンを表示」など応用ができますね。サイトに合わせて、ぜひカスタマイズしてみてください!
この記事のURLとタイトルをコピーする