明天来实现一个跟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
发表回复