プログラミング初心者にとって、実際に動くものを作ってみることは、プログラミングスキルを向上させるために必要です。当サイトではそのネタを他の記事でも提供しています。今回はネタとして、JavaScriptでテキストタイピングアニメーションを実装したので紹介します。
当記事を読むメリット
実装をした際の表示
ウェブサイトの初見の印象は非常に重要です。面白くて、目を引くようなコンテンツは、訪問者の関心を引き付け、より長くサイトに留まってもらうことができます。テキストタイピングアニメーションは、そのようなインパクトを与えるのに最適な方法の一つです。シンプルながらも効果的なこのアニメーションは、訪問者の注意を引き、メッセージを際立たせます。
タイピングアニメーションの動作
このアニメーションでは、ウェブページ上にテキストが1文字ずつ現れる様子が表示されます。まるで手で打ち込まれているかのように、テキストが順番に出現し、リアルタイムでの入力を再現します。
カーソルの点滅効果
文字の入力中および入力後、テキストの末尾に点滅するカーソルが現れます。このカーソルは、テキストの入力が完了したことを視覚的に示し、ウェブページに動きを加える効果があります。
ソースコード例
以下に示すのは、このタイピング効果を実現するためのHTML、CSS、JavaScriptのコード例です。
HTMLソースコード例
HTMLでは、単純なdiv
要素を作成し、IDをtypingText
としています。これはJavaScriptで操作するためのidとしています。
<div id="typingText"></div>
CSSソースコード例
CSSでは、テキストのスタイルを設定し、カーソルのアニメーションを定義しています。@keyframes
でカーソルの点滅効果を作成し、typingCursor
クラスでこれを適用しています。
#typingText {
font-size: 24px;
line-height: 1.5;
}
#typingCursor {
display: inline-block;
width: 1px;
height: 36px;
margin-left: 10px;
vertical-align: middle;
background-color: #333;
animation: blinkCursor 0.75s steps(5) infinite;
}
@keyframes blinkCursor {
from {
background-color: #333;
}
to {
background-color: transparent;
}
}
step(5)について
steps(5)
は、animationプロパティのサブプロパティである「animation-timing-function」に指定できる値です。通常、「animation-timing-function」は「ease」や「ease-in」などを指定するイメージがありますが、steps()
関数の使用することができます。steps()
関数を使用すると、アニメーションを特定の回数の「ステップ」に分けて進めることができます。
steps()
関数内で使用する数字ですが、@keyframes
内でfromとtoの2ステップなので、最低限2以上を指定する必要があります。数字を変化させてもわかりやすく大きな変化はないですが、ただ数字が大きめの方が、タイピングアニメーションらしくなるので、色々な数字を試してみて、ご自身が良いと思う数値を見つけていただければと思います。
JavaScriptソースコード例
タイピングアニメーションを実装していますが、ページを読み込んだ時に、アニメーションする要素が画面内に入っているか、入っていないかについても考慮しています。
document.addEventListener('DOMContentLoaded', function () {
// アニメーションで表示したいテキストを設定
const text = "ここに長いテキストを入力します。テキストが長くなると自動的に折り返され、カーソルが適切に表示されるようになります。";
const typingText = document.getElementById('typingText');
// 表示する文字の位置を追跡
let index = 0;
// アニメーションがすでに開始されたかどうか
let started = false;
// 1文字ずつテキストを表示するアニメーションを実行
function typeText() {
if (index < text.length) {
typingText.innerHTML = text.substring(0, index) + '<span id="typingCursor"></span>';
index++;
setTimeout(typeText, 100);
} else {
typingText.innerHTML = text + '<span id="typingCursor"></span>';
}
}
// 指定された要素が画面内にあるかどうかを判定
function isVisible(elem) {
const rect = elem.getBoundingClientRect();
return rect.top < window.innerHeight && rect.bottom >= 0;
}
// ページ読み込み時に「typingText」が画面内にあれば、アニメーションを発動する
function startAnimationIfVisible() {
if (!started && isVisible(typingText)) {
started = true;
typeText();
}
}
startAnimationIfVisible();
// スクロールして「typingText」が画面内に入ったときに、アニメーションを発動する
window.addEventListener('scroll', function () {
startAnimationIfVisible();
});
});
まとめ
JavaScriptを使ったテキストタイピングアニメーションは、ウェブサイトの見出しや重要なメッセージにこの効果を使用することで、訪問者の興味を引き、メッセージを強調することが可能です。今回の記事を通じて、基本的なHTML、CSS、JavaScriptのスキルアップさせ、ご自身のポートフォリオや、実際のWeb制作などに生かしていってください!