chatGPTふうな出力.
実際に出力したらこんな感じになります(YOUTUBE動画参照).
※リアルタイムなイベント処理(input)には対応していません.
demo
https://zip358.com/tool/demo89/
moji-v1.0.0.js
let moji = {
'fn':function(txt='#txt',view='#view'){
document.querySelector(view).innerText = '';
(async function viewText(view,txt) {
document.querySelector(view).innerText = '';
for (const element of txt) {
await pause(50);
document.querySelector(view).innerText += '●';
await pause(50);
document.querySelector(view).innerText = document.querySelector(view).innerText.slice(0, -1) + element;
}
})(view,document.querySelector(txt).value);
}
};
function pause(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#view {
background-color: #000;
color: #eee;
width: 350px;
overflow-wrap: break-word;
}
</style>
</head>
<body>
<textarea id='txt'>吾輩は猫である。名前はまだない。どこで生れたか頓(とん)と見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。</textarea>
<button type="button" id='btn'>view</button>
<div id="view"></div>
<script src='moji-v1.0.0.js?t=<?= time() ?>'></script>
<script>
document.querySelector('#btn').addEventListener('click', function() {
moji.fn('#txt', '#view');
});
</script>
</body>
</html>