任意のコンテンツまでスクロールしたときや上部から少しスクロールしたら表示されて、閉じるボタンを押すとページを再読み込みするまで非表示になるフローティングバナー!

参考サイト様~~~😭😭

こちら組み合わせるだけだと、閉じるボタンで消してもスクロールしたら表示されてしまうので😂
+こちら!⬇️

任意のコンテンツまでスクロールしたらバナー表示

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>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です