文字を一文字ずつフェードインさせる処理です
一応自作ですので不具合等あるかも知れません。参考サイトも見つけましたのでそちらの方がよいかも知れません。
JavaScriptを使って表現しております。またテキストが見え始めたら処理するようにもしております
@keyframesを変えればもっと違った見た目にもできますよ
文字を一文字ずつフェードインさせる処理です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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; } } |
1 2 3 | <div id= "one-word-box" > <div id= "one-word-text" >文字を一文字ずつフェードインさせる処理です</div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #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 ; } } |