下スクロールで消えて、上スクロールで出てくるグローバルナビゲーションを作る

内容に広告・プロモーションを含みます
下スクロールで消えて、上スクロールで出てくるグローバルナビゲーションを作る
  • URLをコピーしました!

最近、下スクロールで消えて、上スクロールで出てくるグローバルナビゲーションを見かけるようになりました。例えばこちらのサイトとか↓。

特に表示領域の少ないタブレットやスマフォで活きてくるテクニックですね。実際に実装してみたいと思います。

まずはサンプルをご覧ください。

この記事を書いた人
  • フリーランスWEBクリエイターとして10年の活動実績。WEB制作歴トータル17年。
  • 要件定義からデザイン・コーディングまで全て担当。
  • Webサイト、LPの制作数、延べ100サイト以上。
  • 個人での売上1300万円超えを機に法人化
  • 現在は株式会社Spring DAY代表、兼クリエイティブディレクターとして現役活動中
かすがです
目次

jQueryで下スクロールなのか上スクロールなのか判別してクラスを付与、削除する

最初にHTMLです。

<header class="site-header flex flex--bet">
    <h1 class="site-logo">
        <img class="site-logo__img" src="images/logo.png" alt="logo">
    </h1>
    <nav class="gnav">
        <ul class="gnav__menu flex flex--bet">
            <li class="gnav__menu__item">
                <a class="gnav__menu__item__link" href="#sec1">SECTION1</a>
            </li>
            <li class="gnav__menu__item">
                <a class="gnav__menu__item__link" href="">SECTION2</a>
            </li>
            <li class="gnav__menu__item">
                <a class="gnav__menu__item__link" href="">SECTION3</a>
            </li>
        </ul>
    </nav>
</header>

この後のjQueryで「site-header」にスクロール方向に応じてクラスを付与、削除します。

jQueryです。

スクロール方向を判別するスクリプトを見ていきましょう。

var startPos = 0,winScrollTop = 0;
$(window).on('scroll',function(){
    winScrollTop = $(this).scrollTop();
    if (winScrollTop >= startPos) {
        $('.site-header').addClass('hide');
    } else {
        $('.site-header').removeClass('hide');
    }
    startPos = winScrollTop;
});

はじめに変数「startPos」と「winScrollTop」を定義します。

「startPos」 = 直前までのスクロールの値

「winScrollTop」 = 現在のスクロール値

となります。

そしてスクロールが発生する度に4行目「if (winScrollTop >= startPos) {」で

直前までのスクロール値より現在のスクロール値が増えているか判別します。

スクロール値が直前より増えている = 下方向スクロール

スクロール値が直前より減っている = 上方向スクロール

となります。

下方向スクロールの場合は「addClass('hide')」でクラスを付与し、

上方向スクロールの場合は「removeClass('hide')」でクラスを削除します。

スクリプトの最後9行目「startPos = winScrollTop」で「startPos」を最新のスクロール値に更新しています。

CSSでアニメーションさせる

CSSです。

.site-header{
    background: rgba(255,255,255,0.8);
    padding: 20px;
    position: fixed;
    top: 0;
    transition: .5s;
    width: 100%;
    z-index: 999;
}
 
.site-header.hide{
    transform: translateY(-100%);
}

ヘッダーのデザイン部分のCSSは割愛しております。

6行目でデフォルトの状態で「transition: .5s;」としています。

12行目「transform: translateY(-100%);」でクラスが付与された後は画面上の見えない位置に移動しています。たったこれだけです。簡単ですね。

応用編

これまでのものだとスクロールし始めたらすぐに上に消えてしまうので、少しスクロールしてから消えるようにします。

jQueryに追加します。

$(window).on('scroll',function(){
    winScrollTop = $(this).scrollTop();
    if (winScrollTop >= startPos) {
        if(winScrollTop >= 200){
            $('.site-header').addClass('hide');
        }
    } else {
        $('.site-header').removeClass('hide');
    }
    startPos = winScrollTop;
});

追加したのは4行目と6行目で囲われた「if(winScrollTop >= 200){」の判定のみです。

これで「下方向のスクロールかつ200px以上スクロールしている」場合からクラスが付与されるのでスクロールし始めてすぐ消えなくなります。

WEBデザイナー・フロントエンドのスキルを確実に身につけたい方へ

「WEBデザインやフロントエンドを学びたい」と思い立ったとき、多くの方がまず独学を選びます。

しかし、独学では「何をどこから学べばいいかわからない」「つまずいたときに誰にも聞けない」といった壁にぶつかることも少なくありません。

一方、スクールで学べば、正しい順序で、現場で使えるスキルを効率よく習得することができます。最短ルートでスキルを身につけたい方には、スクール学習がおすすめです。

かすが

私は26歳で印刷業からWEBデザイナーを目指して学び始めましたが、やはり独学に限界を感じ短期スクールで学びました。本気でスキルを身につけたいならスクールはマジで行った方が良いです!

スクールで学ぶ5つのメリット
  • カリキュラムが体系化されているため、基礎から応用まで無駄なく学べる
  • 現役のプロから実践的なフィードバックを受けられる
  • わからないことをすぐに質問・解決できる環境がある
  • 制作課題を通じて、ポートフォリオが作成できる
  • 学習仲間や講師とのつながりが、モチベーション維持につながる
スクール選びでチェックすべき5つのポイント
  • カリキュラムが現場で必要とされる技術に対応しているか
  • 現役デザイナー・エンジニアが講師として在籍しているか
  • ポートフォリオ制作のサポートが充実しているか
  • 卒業後の就職・転職支援が用意されているか
  • オンライン・通学など、自分の生活スタイルに合った受講形式

遠回りせず、確実にスキルを身につけたいなら、プロに教わるのが一番の近道です。

WEBデザイナー・フロントエンドエンジニアとして一歩踏み出したいあなたにぴったりのスクールを、下記の記事でご紹介しています。ぜひチェックしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次