designsupply.llc
  • aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. JavaScriptとCSSで手軽にテキストを1文字ずつ動かすシンプルなアニメーションを実装する

JavaScriptとCSSで手軽にテキストを1文字ずつ動かすシンプルなアニメーションを実装する

  • 2021.02.27
  • プログラミング
  • JavaScript
Updated: 2021.02.27
最近ではウェブサイトにアニメーションが用いられることが多くなってきており、様々なアニメーション表現が見られるようになりました。今回はJavaScriptとCSSを使って、テキストを1文字ずつ動かすアニメーションを実装してみたいと思います。   ここでは基本的なアニメーション部分はCSSで、テキストを1文字ずつ分割するところをJavaScriptで作成していきますが、今回は1文字ずつ動かす必要があるので、transitionの値を文字ごとに変える必要があるのがポイントです。   それではまずはHTMLを見ていきます。今回はJavaScript側で対象となる文字列を保持しておくので、要素自体は空にしておきます。適宜id属性とclass属性をあてておきます。 【HTML】※一部抜粋
<h1 id="text" class="animation"></h1>
  続いてCSSです、先ほどのHTMLの中に1文字づつ分割したテキストの文字がspan要素として格納されるので、そのspan要素に対してアニメーション効果を設定していきます。今回はフェードインで動きをつけたアニメーションにしていますが、CSSでいろんなバリエーションができますね。 【Sass(SASS)】
.animation 
  span 
    transition-property: transform, opacity
    transition-duration: 0.4s
    transition-timing-function: ease
    transform: translate(-10px, -10px)
    opacity: 0
  &.played
    span
      opacity: 1
      transform: translate(0, 0)
  アニメーション実行時にはclassが付与されるので、アニメーション前の初期スタイルと、アニメーション時のスタイルを用意しておきます。続いてJavaScriptでテキストを分割しアニメーションの準備をしていきます。まずは対象となるテキストを変数に入れておきます。そして、「spilit()」と「slice()」メソッドで1文字単位で値を作成して配列型に変換していきます。 【JavaScript】
const target = document.getElementById('text');
const text = 'HelloWorld!!';
const dataArray = text.split('').slice(0);
const html = dataArray.map((word, index) => {
  return `<span style="transition-delay: ${(index + 1) * 100}ms;">${word}</span>`;
});
html.forEach((element, index) => {
  target.insertAdjacentHTML('afterbegin', element);
});
target.classList.add('played');
  文字単位で配列の値に格納できたら、「map()」メソッドで1文字ずつspan要素で囲んでいきます。この時に、インデックスの値を取得してその値を使って、transition-delayを設定することで、時間差を作ることができ1文字ずつのアニメーションが可能になります。そして最後に元々のHTMLで用意した要素に格納していきます。   実際にこのJavaScriptを実行すると下記のようなHTMLが動的に作成されます。transition-delayが要素単位で個別に設定されているのが確認できます。
<h1 id="text" class="animation">
  <span style="transition-delay: 100ms;">H</span>
  <span style="transition-delay: 200ms;">e</span>
  <span style="transition-delay: 300ms;">l</span>
  <span style="transition-delay: 400ms;">l</span>
  <span style="transition-delay: 500ms;">o</span>
  <span style="transition-delay: 600ms;">W</span>
  <span style="transition-delay: 700ms;">o</span>
  <span style="transition-delay: 800ms;">r</span>
  <span style="transition-delay: 900ms;">l</span>
  <span style="transition-delay: 1000ms;">d</span>
  <span style="transition-delay: 1100ms;">!</span>
  <span style="transition-delay: 1200ms;">!</span>
</h1>
  あとは、ページの読み込み時やボタンクリックなどのトリガーでアニメーション実行用のclassを付与させるとアニメーション効果が走るようになります。実際に作成したサンプルを下記に用意していますのでご参考に。  

See the Pen text_sequential_animation by DesignSupply.LLC (@designsupply) on CodePen.

 
  今回はJavaScriptとCSSを使ってテキストを1文字ずつ動かすアニメーションを作成してみました。文字数が少ない場合にはHTMLでハードコーディングしても実現できるのですが、文字数が多くなってくるとこのようにJavaScriptで動的に用意してあげる方がいいですね。配列操作次第で文字の並び替えや、アニメーションの方向なども調整できますので是非試してみてはいかがでしょうか。
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact