Written by Kasumi

【簡単CSS・jQuery】左から右に流れるようなテキストアニメーションを実装する方法

ある要素がスクロール位置まできたら左から右へ流れるようなアニメーション(テキストエフェクト)を実装したい。

本記事ではCSS・jQueryを使ってこのような悩みを解決します。

実装サンプル

See the Pen
左から右テキストエフェクト
by Kohei (@kouk05)
on CodePen.0

実装サンプルです。

スクロールすると、テキストが左から右へ流れるようにアニメーションされてる事がわかります。

実装方法は以下の通りです。

HTML

  <span class="leftAnime">
    <span class="leftAnimeInner">
      左から右テキストエフェクト
    </span>
  </span>

まず最初にアニメーションを実装したいHTML要素にleftAnimeクラス、その子要素にleftAnimeInnerクラスを付与します。

CSS

  /*左から右テキストエフェクト*/
  .leftAnime {
    opacity: 0;
    overflow: hidden;
    display: inline-block;
  }

  .leftAnimeInner {
    display: inline-block;
  }

//次章で追加するクラス
  .slideAnimeLeftRight {
    animation-name: slideTextX100;
    animation-duration: 1s;
    animation-fill-mode: forwards;
    opacity: 0;
  }

  @keyframes slideTextX100 {
    from {
      transform: translateX(-100%);
      /*要素を左の枠外に移動*/
      opacity: 0;
    }

    to {
      transform: translateX(0);
      /*要素を元の位置に移動*/
      opacity: 1;
    }
  }

//次章で追加するクラス
  .slideAnimeRightLeft {
    animation-name: slideTextX-100;
    animation-duration: 1s;
    animation-fill-mode: forwards;
    opacity: 0;
  }


  @keyframes slideTextX-100 {
    from {
      transform: translateX(100%);
      /*要素を右の枠外に移動*/
      opacity: 0;
    }

    to {
      transform: translateX(0);
      /*要素を元の位置に移動*/
      opacity: 1;
    }
  }

上記CSSを前章で追加したクラス・次章のjQueryで追加するクラスに付与します。

簡単に説明すると@keyframestransform: translateX();プロパティを使って要素を最初に枠外へ移動します。

この時、leftAnimeクラスは左枠外へ移動、子要素のleftAnimeInnerクラスは右枠外へ移動します。

要素がスクロール位置まできたらアニメーションプロパティを付与し、要素を元の位置に戻します。

JQuery

function slideAnime() {
  //テキストが左から右に流れるアニメーション
  $('.leftAnime').each(function () {
    var elemPos = $(this).offset().top;
    var scroll = $(window).scrollTop();
    var windowHeight = $(window).height();
   //要素がスクロール位置まできたら   
    if (scroll >= elemPos - windowHeight) {
      //クラス付与
      $(this).addClass("slideAnimeLeftRight");
      $(this).children(".leftAnimeInner").addClass("slideAnimeRightLeft"); 
    } else {
      //クラス削除
      $(this).removeClass("slideAnimeLeftRight");
      $(this).children(".leftAnimeInner").removeClass("slideAnimeRightLeft");

    }
  });

}

//スクロールしたらアニメーションさせる
$(window).scroll(function () {
  slideAnime();
});
// ページが読み込まれたらアニメーションさせる
$(window).on('load', function () {
  slideAnime();
});

jQueryを使って要素位置までスクロールしたらクラスを付与します。

leftAnimeクラスにはslideAnimeLeftRightクラスを付与。

子要素のleftAnimeInnerクラスにはslideAnimeRightLeftクラスを付与します。

スクロール位置が要素を離れたら上記付与したクラスを削除します。

以上の実装手順で、要素位置まできたら左から右へ流れるようなテキストアニメーションの完成です。

まとめ

webページをエレガントに見せたいときなどに役立つかもです。

以上で解説を終わります。

目次

関連記事

HTMLCSS

input:text要素をクリックした時の枠線をCSSで変更する方法

2022.05.04
4080
HTMLCSS プログラミング

【簡単CSS】videoタグを使って動画を背景に設定する方法

2022.03.12
12879
HTMLCSS プログラミング

【簡単】inputタグで入力した内容の履歴・入力候補を出さない方法【属性を設定すれば解決】

2022.02.24
13680
HTMLCSS

【HTML】selectタグを選択したらformをsubmit(送信)する方法

2023.08.31
1988