画像を左から右にスクロール量に応じてスライドインで表示するアニメーション【Javascript・CSS】

画像を左から右にスライドインで表示するアニメーション

こんにちは。

ゆうや(@yuyaphotograph)です!

この記事では、

  • 可視範囲までスクロールしたら画像が左から右にスライドインで表示されるようにするにはどうすればいいの?
  • 黒色背景が先に表示されて後を追うようにめくれて画像が表示されるアニメーションを実装するにはどうするの?
  • 任意の要素がスクロール画面に現れたらアニメーションさせるにはどうしたらいいの?

という方のお悩みを解決します!

完成イメージの共有

実際に見たほうがイメージしやすいかと思いますので以下からご覧になってくださいまし(^o^)

デモページで動きを確認する

HTML

さあ!早速作っていきましょう!

HTMLは以下をお使い下さい〜!

index.html
<a href="" class="Item">
  <div class="Item-Box JS_ScrollItem">
    <div class="Item-Box-ImgBox">
      <div class="Item-Box-ImgBox-Img" style="background:url('./img/画像名') no-repeat center; background-size:cover;"></div>
    </div>
  </div>
</a>

画像は以前こちらの記事で紹介した方法でコーディングしております!

CSSで画像の縦横比を維持したまま表示させる方法CSSで画像の縦横比を維持したまま表示させる方法【レスポンシブ対応】

ポイントは、

  • 実際に使うときをはリンクにすることが多いと思うので親要素はaタグで
  • アニメーション用のクラス「JS_ScrollItem」を付与する
  • 画像はimgタグではなく比率維持のためdivでコーディングする

などです!

CSS

今回のCSSはかなり長いです笑

以下お使い下さい!

index.css
.Item {
  margin-top: 20px;/*なくてもOK*/
  width: 40%;/*お好みで*/
}
@media screen and (max-width: 768px){
  .Item {
    width: 40%;
  }
}
.Item-Box {
  overflow: hidden;
}
.Item-Box-ImgBox {
  overflow: hidden;
  position: relative;
  width: 100%;
  -webkit-transform: translate3d(-100.5%,0,0);
  transform: translate3d(-100.5%,0,0);
  -webkit-transform-origin: left;
  transform-origin: left;
  -webkit-transition-duration: 1s;
  transition-duration: 1s;
  -webkit-transition-timing-function: cubic-bezier(.075,.82,.165,1);
  transition-timing-function: cubic-bezier(.075,.82,.165,1);
  -webkit-transition-delay: 0s;
  transition-delay: 0s;
}
.Item-Box.isShow .Item-Box-ImgBox {
  -webkit-transform: translate3d(0,0,0);
  transform: translate3d(0,0,0);
}
.Item-Box-ImgBox:before {
  content: '';
  display: block;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 2;
  background-color: #000;/*黒ブロックの色指定*/
  -webkit-transform: scaleX(1);
  transform: scaleX(1);
  -webkit-transform-origin: right;
  transform-origin: right;
  -webkit-transition-duration: 1s;
  transition-duration: 1s;
  -webkit-transition-timing-function: cubic-bezier(.075,.82,.165,1);
  transition-timing-function: cubic-bezier(.075,.82,.165,1);
  -webkit-transition-delay: .4s;
  transition-delay: .4s;
}
.Item-Box.isShow .Item-Box-ImgBox:before {
  -webkit-transform: scale(0,1);
  transform: scale(0,1);
}
.Item-Box-ImgBox-Img {
  width: 100%;
  padding-top: 62.5%;/*画像比率指定*/
  transition-duration: 4s;
  -webkit-transition-timing-function: cubic-bezier(.075,.82,.165,1);
  transition-timing-function: cubic-bezier(.075,.82,.165,1);
}

スクロールアニメーション

Javascriptで「一定の位置までスクロールしたらJS_ScrollItemにisShowクラスを付与する」という処理を書いて完成です!

index.js
$('.JS_ScrollItem').each(function(){
    let $item = $(this);
    $(window).on('scroll', function(){
      let top = $item.offset().top; // ターゲットの位置取得
      let position = top - $(window).height();  // イベントを発火させたい位置
      if($(window).scrollTop() > position){
        $item.addClass('isShow');
      }
    });
  });

参考記事

参考 要素がスクロール画面に現れたらアニメーションさせるJS | デザインやWEBに関する情報を発信する【まるログ】 参考 jQueryとCSSのtransitionで可視範囲に入ってからアニメーションさせる方法Webpark

まとめ

いかがでしたでしょうか。

モダンなWebサイト制作をする際に使用する機会があると思うので紹介させていただきました!

「他にもスクロール関係のTipsがあったら知りたい!」という方は以下の記事をチェックしてみてください〜

スクロールアニメーションをjQueryなしで簡単実装できるライブラリ AOSの使い方スクロールアニメーションをjQueryなしで簡単実装できるライブラリ AOSの使い方 CSSのflexboxで横スクロールを実装する方法【CSS】flexboxで横スクロールを実装する方法 【コーディング】HTML・CSS・Javascriptサンプルコード記事まとめ【コーディング】HTML・CSS・Javascriptサンプルコード記事まとめ