明天来实现一个跟chatgpt无关的性能,但不是它的ai性能,而是它的打字成果。应用过chatgpt的都晓得,它的文字输入是实时的,就跟咱们打字的成果一样
chatgpt打字成果
这是应用前端实现的一个chatgpt打字成果,页面初始化的时候会主动打出一段文字
而后上面有个文本域,咱们能够输出一些文字,而后回车看看成果:
能够看到,回车后,在文本域输出的内容,会在这块彩色的内容区以打字的模式显示进去。
看完成果后咱们来看下代码的实现逻辑:
<template> <div class="cmdbox"> ChatGPT打字成果 <div class="content"></div> <div class="textarea"> <textarea v-model="message" placeholder="请输出文字后回车看看成果" @keydown.enter="handleEnter"></textarea> </div> </div></template><script>export default { name: 'HelloWorld', data () { return { msg:'你好,我是模拟ChatGPT的打字成果', message:'', } }, mounted() { this.writing(0) }, methods:{ handleEnter() { event.preventDefault();//阻止enter键回车换行 this.msg=this.message const dom = document.querySelector('.content') dom.innerHTML = '' this.writing(0) this.message='' }, writing(index){ const dom = document.querySelector('.content') const data = this.msg.split('') if (index < data.length) { dom.innerHTML += data[index] setTimeout(this.writing, 200, ++index) } } }}</script>
代码剖析:
1.外围的逻辑次要是writing办法,当页面初始化的时候先调用一遍writing办法
2.通过setTimeout设置200毫秒的工夫距离, 每隔200毫秒向dom中插入对应的数据
字前面的闪动光标:
.content::after{ content: '_'; animation: blink 1s infinite}@keyframes blink{ from{ opacity: 0; } to{ opacity: 1; }}
通过一个伪类after将光标定在这个class的最初面, 并给一个显示暗藏的循环动画模仿光标的闪动
残缺我的项目下载:
公众号【GitWeb】内回复:typing