見出し画像

【HTML CSS 独学6】 基礎を固めて高く積み上げ!「jQueryでスクロール値に応じた動きをつけてみる」 投資家のFIREへの旅路 第234回

画面スクロールに応じて、バーが可変するエフェクトを作りました。

使うのは、HTML・CSS・jQueryです。

動きはこんな感じです!

このように、どのくらいスクロールされてたかを見張るコードがあって、そのスクロール値によって、要素に新たなclassを付与することで、このようなエフェクトを作っています。

詳しく見ていきましょう!


HTML

<h1 class="blog-category-title"> Web Design </h1>

CSS

    .blog-category-title {
     width: 100%;
     position: absolute;
     top: 8%;
     color: white;
     z-index: 1000;
     padding: .5%;
     background-color: #3c7cb8;
     transition: 1s;
     text-align: center;
   }
   
   
    .blog-category-title.fixed {
     width: 20%;
     position: fixed;
   }

jQuery

$(window).scroll(function() {
 
   if ($(window).scrollTop() < 10) {
     $('.blog-category-title').removeClass('fixed');
   }
   
   if ($(window).scrollTop() > 10) {
     $('.blog-category-title').addClass('fixed');
   }

 });


【解説】

・HTML

<h1 class="blog-category-title"> Web Design </h1>

HTMLは1行です。<h1>タグに、blog-category-titleというclassをつけています。ここは任意のclass名にしてください。

そして、Web Design という文字を表示させるようにしています。


・CSS 

CSSは2つあります。
それは、スクロールする前のスタイルと、
スクロール後のスタイルを指定するためです。

スクロール前のCSSはこちら

CSS.blog-category-title {
     width: 100%;
     position: absolute;
     top: 8%;
     color: white;
     z-index: 900;
     padding: .5%;
     background-color: $title-Color2;
     transition: 1s;
     text-align: center;
   }

このコードが、スクロールした後は、太字部分を下記のように変更します。

CSS.blog-category-title.fixed {
     position: fixed;
     width: 20%;
   }

widthを、
100% → 20% に変更

positionを
absolute → fixed に変更


そして、もう一つのポイントは、
CSS ② には、
.blog-category-title の後に、.fixed がついています。

つまり、スクロールしたら、fixedというclassを追加して、スクロール後にだけ、CSS②を適用させるということです。

この場合、CSS①と②で、共通の点については、②に書く必要はありません。

逆に、色を変えたい場合などは、
CSS②に新たに、background-colorを設定すれば、スクロール後に、色が変化するようにもできます。

では、このスクロールしたかどうかを判定するコードがこちら!


・jQuery

$(window).scroll(function() {

 if ($(window).scrollTop() < 10) {
  $('.blog-category-title').removeClass('fixed');
 }
   
 if ($(window).scrollTop() > 10) {
  $('.blog-category-title').addClass('fixed');
 }

 });

上から順に見ていきましょう!


<その1>

$(window).scroll(function() { 

・
・
・
・

});

このコードは、「window(画面)がscroll(スクロール)された時に実行する処理」という意味です。functionというのは、関数を意味します。
関数という表現がわかりにくいので、嫌いですので、
別の表現をすると機能ですね! 

つまり、
$(window).scroll(function() {
});
内に、画面がスクロールされた時にやってほしいことを書くよ!
と、宣言しているわけです。


<その2>

if ($(window).scrollTop() < 10) {
  $('.blog-category-title').removeClass('fixed');
 }

次のコードは、分解して読めば簡単!

if 

・・・「もしも」
 ($(window).scrollTop() < 10) {  

・・・画面スクロール値が10未満なら」
$('.blog-category-title').removeClass('fixed');

・・・.blog-category-titleというclassのついた要素から、fixedというclassを削除(remove)してください。
}

まとめると、
「もし、スクロール値が10未満になったら、.blog-category-titleというclassのついた要素から、fixedというclassを削除(remove)してください。」

このように指令を出しています。



<その3>

二つ目のコードも同じようなことをしています。

 if ($(window).scrollTop() > 10) {
  $('.blog-category-title').addClass('fixed');
 }

先程と違う点は、
<10 でなく、 >10であるところと、
removeClassでなく、addClassであるところ!

もう、お分かりですね!

このコードでは、
「もし、スクロール値が10以上になったら、.blog-category-titleというclassのついた要素から、fixedというclassを追加(add)してください。」

という意味になります。

このコードによって、スクロール値が、10を超える=10スクロールすると、"fixed"というclassが"blog-category-title"というclassを持つ要素に追加されてます。

そうすると、
CSS②で指定していたスタイルが、適用される流れになります。




【まとめ】

jQueryを使って、スクロール値に、応じて、スタイルを変えることで、
ユーザーの操作に合わせた処理がでいるようになりました。

このような、エフェクトは、面白いですよね!

自分の思ったように動いてくれると、さらに楽しい!!

今回のやり方を応用すれば、
もっと、いろいろなエフェクトを作ることができます。

根幹となる仕組みは、シンプルです。


基本のCSSと、変化後のCSSを用意する。

基本のCSSと、変化後のCSSをclassで区別する。

jQueryで、条件を指定し、変化後のclassを追加する。

これをどんどん応用していきましょう!!!

この記事が気に入ったらサポートをしてみませんか?