任意のコンテンツまでスクロールしたときや上部から少しスクロールしたら表示されて、閉じるボタンを押すとページを再読み込みするまで非表示になるフローティングバナー!
参考サイト様~~~😭😭
こちら組み合わせるだけだと、閉じるボタンで消してもスクロールしたら表示されてしまうので😂
+こちら!⬇️
任意のコンテンツまでスクロールしたらバナー表示
class「bnr_show」をつけたコンテンツが表示されたらバナーをフェードイン表示させる。

HTML
<div class="bnr_show"> <!--スクロールしてこの部分がページに表示されたらバナーも表示--> <h1>見出し見出し見出し</h1> <p>テキストテキストテキスト<br> テキストテキスト<br> テキストテキストテキスト</p> </div> <!--フローティングバナー--> <div class="floating-bnr bnr01"> <button class="bnr_close"><i class="fas fa-xmark"></i></button> <a href="" target="_blank"> <img src="" alt=""> </a> </div>
CSS
/*フローティングバナー*/ .floating-bnr.bnr01 { box-shadow: 0 5px 16px rgba(0, 0, 0, 0.05), 0 8px 14px rgba(0, 0, 0, 0.08); display: none; position: fixed; bottom: 20px; right: 10px; width: 320px; max-width: 90vw; height: auto; z-index: 9999; } .floating-bnr a:hover { opacity: 0.7; transition: 0.2s; } /*閉じるボタン*/ .bnr_close { background-color: #f8f8f8; border: none; border-radius: 25px; box-shadow: 0 0 7px rgb(0, 0, 0, 0.4); color: #777; cursor: pointer; font-weight: bold; padding: 5px 8px; position: absolute; right: -4px; top: -2px; } .fa-xmark:before { content: "\f00d"; font-family: "Font Awesome 5 Free"; font-style: normal; }
4行目display:none;でページ読み込み時にバナーがチラ見えするのを防止。
閉じるボタンの×はfontawesome想定。
JQuery
先にJQueryの読み込みを忘れずに😉
<script> // フローティングバナー $(function () { var btnOffset = $('.bnr_show').offset().top; var winH = $(window).height(); var fixedbtn = $('.floating-bnr'); fixedbtn.hide(); $(window).scroll(function () { if ($(this).scrollTop() > btnOffset - winH) { fixedbtn.fadeIn(); } else { fixedbtn.fadeOut(); } }); // 閉じるボタン $(document).ready(function () { $('.bnr_close').click(function() { $(window).off('scroll'); $(this).parent().hide(); }); }); }); </script>
elseのfadeOutで、コンテンツがページ外になったらバナーも非表示になる。
$(window).off ⇒イベント削除
scrollを指定することで、閉じたバナーがスクロールで読み込まれるのを停止できる💡
でもこれだと、ほかにscrollイベント(スクロールすると途中から出てくる固定ヘッダーとか)があるときはそれも一緒に停止してしまうので、その場合はteratailの二つ目のご回答で⬇️
<script> // フローティングバナー $(function () { var btnOffset = $('.bnr_show').offset().top; var winH = $(window).height(); var fixedbtn = $('.floating-bnr'); var closeButtonClicked = false; fixedbtn.hide(); $(window).scroll(function () { if (closeButtonClicked) return; //クリックされていたら以下実行しない if ($(this).scrollTop() > btnOffset - winH) { fixedbtn.fadeIn(); } else { fixedbtn.fadeOut(); } }); // 閉じるボタン $('.bnr_close').click(function() { $(this).parent().hide(); closeButtonClicked = true; }); }); </script>
※offset().topでコンソールエラーが出るとき
該当箇所(5、12行目)を下記に変更すると解消されるはず🤔
var btnOffset = $('.bnr_show').offset().top; if ($(btnOffset).length) { var btnOffsetTop = $(btnOffset).offset().top; } . . . if ($(this).scrollTop() > btnOffsetTop - winH) { . . .
参考様~~~!
サイトがレスポンシブ対応でないとき
3行目を変更。これで囲むといいらしい🤗
逆にレスポンシブでこれを使うとちょっと挙動が不安になる🤔かも
$(function () { $(window).on('load resize',function(){ . . . }); });
参考様……!!
上部から任意の範囲でスクロールしたらバナー表示
コンテンツでなく上部からのスクロール位置でバナーを表示する。JSを少し調整。
JQuery
<script> // フローティングバナー $(function () { var fixedbtn = $('.floating-bnr'); var closeButtonClicked = false; fixedbtn.hide(); $(window).scroll(function () { if (closeButtonClicked) return; if ($(this).scrollTop() > 100) { fixedbtn.fadeIn(); } else { fixedbtn.fadeOut(); } }); // 閉じるボタン $('.bnr_close').click(function() { $(this).parent().hide(); closeButtonClicked = true; }); }); </script>