文字を一文字ずつフェードインさせる処理です
一応自作ですので不具合等あるかも知れません。参考サイトも見つけましたのでそちらの方がよいかも知れません。
JavaScriptを使って表現しております。またテキストが見え始めたら処理するようにもしております
@keyframesを変えればもっと違った見た目にもできますよ
文字を一文字ずつフェードインさせる処理です
document.addEventListener('DOMContentLoaded', function() { // 一文字ずつ表示 character_by_character("one-word-box", "one-word-text", 0.5, 0.05 ); }); // スクロール時の処理 document.addEventListener('DOMContentLoaded', function() { window.addEventListener( 'scroll', function() { // 一文字ずつ表示 character_by_character("one-word-box", "one-word-text", 0.5, 0.05 ); }); }); //---------------------------------------------------------- // 文字を一文字ずつ表示させるための処理 //---------------------------------------------------------- function character_by_character( p_idName, t_idName, delay, duration ) { //親の要素を取得 let p_ele = document.getElementById( p_idName ); //textのid要素を取得、のち<span>~に書き換える let spanText = document.getElementById( t_idName ); // 親要要素が見えたら処理 var scrollTop = window.scrollY; var scrollBtm = scrollTop + window.innerHeight // 対象の要素の位置を取得 var targetTop = p_ele.getBoundingClientRect().top + scrollTop; var targetBtm = targetTop + spanText.clientHeight; if( scrollBtm > targetTop ) { //要素の中身を取得、文字を区切るため let text = spanText.innerHTML; spanText.style.opacity = 1; // すでに<span>に変換してたら処理しない if( !(text.indexOf( "span" ) === -1) ) return; //変数に空白を設定(spanで上書きする) let newText =""; let color = ""; //splitで<span>に区切る text.split("").forEach(function(value,j) { color ="#000000"; newText += '<span style ="animation:showtext 1s linear ' + ( delay + j*duration ) + 's forwards; '+ color +' " class ="show">' + value + '</span>'; }); //spanTextを書き換える spanText.innerHTML = newText; } }
<div id="one-word-box"> <div id="one-word-text">文字を一文字ずつフェードインさせる処理です</div> </div>
#one-word-text { opacity: 0; } #one-word-text span { font-weight: 900; display: inline-block; opacity: 0; } @keyframes showtext { 0%{ opacity: 0; } 100%{ opacity: 1; } }