###回答
以下を修正すれば、できると思います。
(1) idea配列はclickイベントの外で定義.
➡clickイベントの度に配列が初期されないように...
(2) clickイベントの度にidea配列の末尾にtextを追加.
(3) idea配列をタグ化する.
(4) innerHtmlでタグを流し込む.
以下、修正後のコードです。ご参考までに。
<body>
<input id="text" type="text">
<button id="button">1文字ずつ表示</button>
<h1 id="title">aaaaaaa</h1>
<script>
let idea=[]; //配列はclickの外で定義
click=()=>{
let text=document.getElementById('text').value;
let title=document.getElementById('title');
let tag = ""; //HTMLタグ生成用
idea.push(text); //テキストを配列にプッシュ
for(let i=0;i<idea.length;i++){
tag = tag + idea[i] + "<br>"; //タグ生成:改行付加
}
title.innerHTML=tag; //HTMLに反映
}
window.onload=()=>{
let button=document.getElementById('button');
button.addEventListener('click',click,false);
}
</script>
</body>
以上です。
###追記
勘違いしており、すいませんでした。
setTimeOutは非同期処理なので、処理が止まらないので、setIntervalで実現できますね。
AkitoshiManabe様が既にご回答されていると思いますが、私も、setIntervalを用いて、作ってみました。
<body>
<input id="text" type="text">
<button id="button">1文字ずつ表示</button>
<h1 id="title"></h1>
<script>
let idea=[]; //文字格納配列
var index = 0; //ループ変数
click=()=>{
let text = document.getElementById('text').value;
idea=text.split(""); //入力テキストを配列化
var id = setInterval(function(){
display_word(); //繰返し実行する関数指定
if(index > idea.length-1){ //setIntervalを止める条件
clearInterval(id);
}
}, 100); //100msecごとにdisplay_word()を実施
index=0; //初期化
}
//1文字表示する関数
var display_word = function(){
let title = document.getElementById('title');
title.innerHTML+=idea[index]
index++
}
window.onload=()=>{
let button=document.getElementById('button');
button.addEventListener('click',click,false);
}
</script>
</body>
以上です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/14 12:32