恵比寿のWebサイト制作・Webデザインチームのブログ。Webデザインやコーディング、SEO対策まで幅広く手掛けています。

恵比寿のデザイン制作チームのブログです。

Webデザイン、
Web制作、
SEO対策の
ご依頼・ご相談

Contact

JavaScriptで、画像や要素が下からふわっと現れるアニメーションを実装する方法

投稿日:

今回は、下のデモのように下からふわっと画像や要素が現れるアニメーションを実装する方法を紹介します。

とても頻繁に使われる表現で、ほとんどの人は目にしたことがあるでしょう。

jQueryなどでコードが紹介されることが多いですが、ここでは生のJavaScriptで書いていきます。

ふわっと現れるアニメーションの実装方法

それでは、HTML、CSS、JavaScriptのコードを説明していきます。

HTML

<div class="element js-animation"><img src="./img/1.jpg" alt="画像1"></div>
<div class="element js-animation"><img src="./img/2.jpg" alt="画像2"></div>
<div class="element js-animation"><img src="./img/3.jpg" alt="画像3"></div>

classに「js-animation」と記述した要素にはアニメーションが加わるようにします。

CSS

.js-animation {
  opacity: 0;
  visibility: hidden;
  transform: translateY(40px);
  transition: all 1s;
}
.js-animation.is-show {
  opacity: 1;
  visibility: visible;
  transform: translateY(0px);
}

js-animationのclassが付与された要素は、opacity:0;でいったん非表示にします。

js-animationにis-showが加われば、要素が下から現れるようにします。

JavaScript

/**
 * 到達したら要素を表示させる
 */
function showElementAnimation() {

  var element = document.getElementsByClassName('js-animation');
  if(!element) return; // 要素がなかったら処理をキャンセル
  
  var showTiming = window.innerHeight > 768 ? 200 : 40; // 要素が出てくるタイミングはここで調整
  var scrollY = window.pageYOffset;
  var windowH = window.innerHeight;

  for(var i=0;i<element.length;i++) { var elemClientRect = element[i].getBoundingClientRect(); var elemY = scrollY + elemClientRect.top; if(scrollY + windowH - showTiming > elemY) {
      element[i].classList.add('is-show');
    } else if(scrollY + windowH < elemY) {
      // 上にスクロールして再度非表示にする場合はこちらを記述
      element[i].classList.remove('is-show');
    }
  }
}
showElementAnimation();
window.addEventListener('scroll', showElementAnimation);

少し説明します。

window.innerHeight > 768 ? 200 : 40;

これは要素が200px(768px以下のウィンドウサイズでは40px)分過ぎたら表示させるために指定します。

これをしないと、要素が現れるタイミングが早すぎて分かりづらくなります。

// 上にスクロールして再度非表示にする場合はこちらを記述
element[i].classList.remove('is-show');

下にスクロールして要素が現れた後、再度上にスクロールした時、また要素を非表示にする場合はこのコードを記述します。

もし、一度現れた要素は表示させたままにする場合は、else if文ごと削除してください。

JavaScriptが無効化された場合の対策

ブラウザの設定や閲覧環境によっては、JavaScriptが動かないことがあります。

そうすると、画像は消えたままになってしまいます。

それを防ぐために、以下のコードをどこかに記述しておくと安心です。

<noscript>
  <style>
  .js-animation {
    opacity: 1;
    visibility: visible;
    transform: translateY(0px);
  }
  </style>
</noscript>

 

こうしておけば、JavaScriptが無効化されても大丈夫です。

もう一度デモを載せておきます。

仕組みが分かれば簡単な処理なので、みなさんも挑戦してみて下さい。

Related Entries

この記事を書いた人

TAC

TAC

Webデザイナー、フロントエンドエンジニア。 Webデザイン、HTML/CSS、JavaScript、PHP、SEOが専門です。