指定の範囲までついてくるフローティングバナー

Tips

何かとつかう機会の多いフローティングバナーですが、
CSSのposition: fixedのみでは、
フッター等の被ってほしくないところまでついてきてしまい、
邪魔になってしまうことも多いです。
そんなとき役立つ「フッター手前」等指定の範囲までついてくる、
フローティングバナーの実装についてメモ

設置位置はストップさせたい場所に

まずはhtmlですが、

<div id="bnrStop">
<div id="bnr">
<a href="link/to/page.html">
<img src="/path/to/the/banner.jpg" alt="">
</a>
</div>
</div>

という感じにシンプルですが、
ここで肝心なのはバナーを設置するhtml上の位置を
最終的に止まってほしい場所にするということです。
理由は後でご説明します。

CSSはこんな感じに

さて続いてCSSの記述ですが、
ポイントはpositionの使い分けです。

#bnrStop {
width: 100vw;
height: 0;
position: static;
};
#bnrStop #bnr {
width: 100px;
height: 240px;
position: fixed;
right: 0px;
top: 300px;
}
/* バナー停止時 */
#bnrStop.stop {
position: relative;
}
#bnrStop.stop #bnr {
position: absolute;
top: auto;
bottom: 0px;
}

とこのような具合に、
「stop」というクラスを付け替えることで、
「#bnrStop」の位置で「#bnr」が固定されるよう記述します。

JSはこんな具合に

最後にjsの記述をこんなふうにすれば、
「#bnrStop」の位置まで来たバナーはピタッと停止してくれます。
※jQueryは先に読み込んでおいて下さいね。

var stop_at = $('#bnrStop'),
bnr = $('#bnr'),
bnr_img = bnr.find('img'),
wdw = $(window),
bnr_h = bnr.outerHeight(), // バナーの高さ
bnr_p = parseInt( bnr.css('top') ), //画面上端からバナー上端までの距離
bnr_b = bnr_h + bnr_p ; // バナーの下端の位置
bnr_img.load(function(e){
// 後から画像が読み込まれた場合は
// バナーの高さを再取得し、再計算する
bnr_h = bnr.outerHeight(),
bnr_b = bnr_h + bnr_p ;
});
function toggle(){
// stopクラス付け外しの処理
var st = wdw.scrollTop(),
border = stop_at.offset().top;
if( st + bnr_b >= border ){
// スクロール量とバナーの下端が停止位置に達した場合の処理
if(! stop_at.hasClass('stop') ){
stop_at.addClass('stop');
}
}else{
// 再びフローティングに戻す処理
if( stop_at.hasClass('stop') ){
stop_at.removeClass('stop');
}
}
};
wdw.on( 'scroll', toggle );

DEMO

こんな感じになります。
※バナーの画像を用意するのが手間だったのでCSSで代用してます。

See the Pen rwPYrz by Shinji Yamamoto (@commono_yamamoto) on CodePen.


お問い合わせ

    個人情報利用目的への同意

    ※このサイトはreCAPTCHAとGoogleによって保護されています。プライバシーポリシー利用規約が適用されます。
    ※お客様が入力した個人情報はSSL暗号化信号によって保護されています。

    個人情報の利用目的
    このお問い合わせフォームでご提供いただく個人情報は、お問合せ等に対する回答や資料送付、その他ご連絡のために利用します。
    当個人情報を第三者に提供することはありません。
    当個人情報の取扱いを委託することはありません。
    必要事項を全てご入力下さい。入力内容に不備がある場合は、ご返信しかねる場合がございます。
    内容により、お時間をいただく場合がございます。
    当個人情報の利用目的の通知、開示、内容の訂正・追加または削除、利用の停止・消去および第三者への提供の停止(「開示等」といいます。)を受け付けております。
    開示等の求めは、info@commono.co.jpで受け付けます。
    統計ツールやクッキー、ウェブビーコン等を用いてご利用状況を調査していますが、これによる個人情報の取得、利用は行っておりません。
    当社の個人情報保護に対する取り組みは「Privacy Policy」を必ずご確認ください。

    COMMONO株式会社
    E-mail:info@commono.co.jp
    個人情報保護方針、個人情報の取扱いについて
    PRIVACY POLICY

    現在準備中です

    お気に入り

    お気に入りから削除

    選択したアイテムをお気に入りから削除しますか?