スクロールした時に下からふわっと文字を出す方法~CSS、jQueryを駆使~

中山テック 代表の中山です。

さて、突然ですがホームページを見ていて、文字が下からフワッと浮き出るアニメーションを見たことがありますか?

これはどのように制御しているのでしょうか。

今回は下から文字をふわっと出す方法についてお話したいと思います。

参考ページ





どのようにフワッと動くのか、ショート動画としてYouTubeにアップしました。

内容はホームページ作成する流れの中でフワッとする動きがあるので、注目してご覧ください。。

面白いと思ったらチャンネル登録・高評価お願いいたします。



コード

こちらはスクロールしてフェードインしていくもの

HTML

<p class="scroll-up">我々は何も成し遂げていない。</p><br><br>
<p class="scroll-up">だがしかし、何をすれば<br><br>良いかもわからない。</p><br><br><br><br>
<p class="scroll-up">まずは色々なことに挑戦し<br><br>何かをやり遂げる・・・</p>

pタグ(文字の1つの段落として表示するHTMLタグ)に「scroll-up」と入れてます。

これはCSSのクラスを読み込んでいるだけなので流し見程度で問題ありません。

CSS

.scroll-up {
  opacity: 0; 
  visibility: hidden;
  transform: translateY(100px);
  transition: all 1s;
}
.scroll-up.is-show {
  opacity: 1;
  visibility: visible;
  transform: translateY(0px);
}

「.scroll-up」は100px手前にスクロールされるまで要素を隠すプログラム。

「.scroll-up.is-show」はスクロールされた時に起動します。

・opacity⇒透明度を表しています。0は透明なので何も表示されません。is-showで1にして表示。

・visibility⇒hiddenで要素を不可視、visibleで可視にします。不可視にしても見えないだけでスペースは残ります。

・transform⇒要素の変更です。translateYの100px指定ということで、元々の場所から縦100px下に配置します

・transition⇒プロパティを指定します。プロパティってなんぞ?と思うでしょうが動きのことを指します。

例としてはallをnoneにするとわかりやすいと思います。「1s」が効かず、「is-show」がパッと表示されます。

「きっちりプロパティを定義して!」と思いの方、「transition-duration: 1s;」で同義ですので、ぜひ試してみてください!

  • システム開発関連記事

jQuery

$(function () {
  $(window).scroll(function () {
    const windowHeight = $(window).height();
    const scroll = $(window).scrollTop();

    $('.scroll-up').each(function () {
      const targetPosition = $(this).offset().top;
      if (scroll > targetPosition - windowHeight + 100) {
        $(this).addClass("is-show");
      }
    });
  });
});

ふわっとさせるにはJavascript(jQuery)制御が必須です。

理由は「隠れている文字の〇〇pxまで来たら」という命令がCSSではできないからです(HTMLもできない)。

「.scroll-up」が表示前のCSS、「is-show」が表示後になるので、コピペして使いたい方はそこだけ変えてください。

※ローカル(オフライン)だと正常に動かないことも多々ありますので、WEB上で試すのが吉



我々は何も成し遂げていない。


だがしかし、何をすれば

良いかもわからない。


まずは色々なことに挑戦し

何かをやり遂げる・・・



また、ふわっとした箇所を表示したり消したい場合はif文の下にコードを追加してください。

※下記コードがない場合は1回だけふわっとします

何度もふわっとさせるとしつこく感じる方もいらっしゃるので、1回が良いかと思います。状況に応じて使い分けてください。

 else {
    $(this).removeClass("is-show");
 }

Javascript(jQuery未使用)

function scroll_effect() {
  var element = document.getElementsByClassName('scroll-up');
  if(!element) return;
                      
  var scrollY = window.pageYOffset;
  var windowH = window.innerHeight;
  var showTiming = 200; // 要素を表示するタイミング
  for(var i = 0; i < element.length; i++) { 
    var elemClientRect = element[i].getBoundingClientRect(); 
    var elemY = scrollY + elemClientRect.top; 
    if(scrollY > elemY - windowH + showTiming) {
      element[i].classList.add('is-show');
      
    }
  }
}

window.addEventListener('scroll', scroll_effect); // スクロール時に実行


jQueryはわかりづらい!という方は通常のJavascriptでも表現できます。

上記コードは前項と同義ですので、使いやすい方で試してみてください!

addEventListenerもお忘れなく。

開発者ツールを使ってブレイクポイント貼るとわかるのですが、スクロールする度に呼ばれるので多少処理は重くなります。

※jQueryも同様ですが

まとめ

さて、ホームページでよく使われる下からふわっと浮き出るアニメーション。

HTML+CSS+Javascript(jQuery)の組み合わせになりますが、慣れたら難しくないです。

特にWEB制作では基本のプログラムなので是非覚えて欲しいです!

また、誤りやアドバイス等ございましたら、いつでもコメントやメール、Twitterでも承っております。

最後までご覧頂き、ありがとうございました。

おすすめの記事