プログラミングに関する情報を中心に、デザイン、ライフハックなどの記事を更新していくブログです。

ユウマのブログ

プログラミング

jQueryで実装するスクロールで色が変わるヘッダー

スクロールで色が変わるヘッダー
ユウマ
こんにちは、ユウマ(@yuuuma_11)です。

この記事では、jQueryを使ってページをある一定の場所までスクロールした時に、色が変わるヘッダーの作り方をご紹介します。

ユウマ
割と多くのサイトで見られるヘッダーデザインです。

完成イメージはこちら。

色が変わるヘッダー

HTMLとCSSでヘッダーの作成

HTML


<header class="header">
  <h1><img src="logo.png" alt="logo" class="header__logo"></h1>
  <nav class="global-nav">
   <ul class="global-nav__list">
      <li class="global-nav__list--item"><a href='#'>SERVICE<span>事業内容</span></a></li>
      <li class="global-nav__list--item"><a href='#'>COMPANY<span>会社案内</span></a></li>
      <li class="global-nav__list--item"><a href='#'>BLOG<span>ブログ</span></a></li>
      <li class="global-nav__list--item"><a href='#'>MEMBER<span>メンバー</span></a></li>
      <li class="global-nav__list--item contact"><a href='#'>CONTACT<span>お問い合わせ</span></a></li>
    </ul>
  </nav>
</header>

CSS


body {
  background-color: gray;
  height: 2000px;
}
.header {
  transition: .3s;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 80px;
  width: 100%;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 100;
}
.header__logo {
  margin-left: 32px;
  width: 120px;
}
.global-nav {
  height: 100%;
  display: flex;
  align-items: center;
}
.global-nav__list {
  height: 100%;
  display: flex;
  align-items: center;
}
.global-nav__list--item {
  transition: .3s;
  height: 100%;
  cursor: pointer;
  color:  #fff;
  padding: 0 30px;
  display: flex;
  align-items: center;
}
.global-nav__list--item:hover {
  background: #EF7E00;
}
.global-nav__list--item a {
  letter-spacing: 2px;
  font-size: 1.1rem;
  text-align: center;
  display: flex;
  flex-flow: column;
}
.global-nav__list--item span {
  margin-top: .7rem;
  font-size: .7rem;
  color: #fff;
}
.contact {
  background: #EF7E00;
}
.contact:hover {
  opacity: .7;
}

jQueryを使って画面スクロール時にヘッダーの色を変える


$(function() {
  let header     = $('.header');
  let headerLogo = $('.header__logo');
  let navLink    = $('.global-nav__list--item');
  let navSpan    = $('.global-nav__list--item').find('span');
  let navContact = $('.contact');

  $(window).scroll(function () {
    // 画面をトップから100px以上スクロールした時
    if ($(this).scrollTop() >= 100) {
      // ヘッダーのbackground-colorを白に変更し、boxshadowをつける
      header.css({'background':'rgba(250, 250, 250, 1)', 'box-shadow':'0 1px 5px gray'});
      // ロゴ画像を変更
      headerLogo.attr('src', 'logo-black.png').css('width', 75);
      // aタグで囲った文字を黒に変更
      navLink.find('a').css('color', '#333');
      // spanタグで囲った文字を黒に変更
      navSpan.css('color', '#333');
      // CONTACTとお問い合わせの文字色のみ、白のまま固定
      navContact.find('a, span').css('color', '#fff');
      // liタグにホバーした際、文字色を変更
      navLink.hover(
        function() {
          $(this).find('a, span').css('color', '#fff');
        },
        function() {
          $(this).find('a, span').css('color', '#333');
          navContact.find('a, span').css('color', '#fff');
        }
    );
    } else {
      // 画面がトップから100px以下の時は、上記と逆の処理を行う
      header.css({'background':'rgba(250, 250, 250, 0)', 'box-shadow':'none'});
      headerLogo.attr('src', 'logo-white.png').css('width', 120);
      navLink.find('a').css('color', '#fff');
      navSpan.css('color', '#fff');
      navLink.hover(
        function() {
          $(this).find('a, span').css('color', '#fff');
        },
        function() {
          $(this).find('a, span').css('color', '#fff');
        }
      );
    }
  });
});

最後に

今回は画面スクロールで色が変わるヘッダーの作り方をまとめてみました。

ユウマ
jQueryのscrollTop()メソッドの使い方を理解しておけば、色々なことに応用することができるので抑えておくと良いですね!

-プログラミング

Copyright© ユウマのブログ , 2020 All Rights Reserved.