Vue前端文字效果:如何让一段文本像是手动一个一个字打出来的

效果展示

自己做的AI聊天机器人界面,我觉得比微信还好看

由于这个前端略微复杂,下文用最简单的例子来展示:

分析需求

对于AI聊天工具的前端,如果AI生成的文本像是一个一个字打出来的,就会让AI看起来更像真的人,可以大幅度提高用户对AI的亲近感。

深入分析该需求,其实就是前端的文本不一次性显示,而是按一定速率逐字显示。

具体做法

需要两个变量,字符串A是实际显示在前端的字符串,另一个字符串B用于保存后端发送来的完整文本,前端控件绑定字符串A,定时从字符串B中取出下一个字符增加到字符串A上即可。

前端很简单

html 复制代码
<p class="text">{{ stringA }}</p>
<button @click="print"><p class="text">点击开启动态效果</p></button>

后端用setTimeout和递归函数结合

javascript 复制代码
import { ref } from 'vue';
const stringA = ref('');
const stringB = ref('');
stringB.value = '苏子曰:"客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭,是造物者之无尽藏也,而吾与子之所共适。"';
function print() {
  console.log(stringA.value.length, stringB.value.length);
  if (stringA.value.length >= stringB.value.length) {
  // 退出递归
    return;
  } else {
  // stringA仍然比stringB短,进入下一次等待和递归
    setTimeout(()=>{
      stringA.value += stringB.value.charAt(stringA.value.length);
      print(stringA, stringB);
    }, 50);
  }
}

完整代码

js 复制代码
<script setup>
import { ref } from 'vue';
const stringA = ref('');
const stringB = ref('');
stringB.value = '苏子曰:"客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭,是造物者之无尽藏也,而吾与子之所共适。"';
function print() {
  console.log(stringA.value.length, stringB.value.length);
  if (stringA.value.length >= stringB.value.length) {
  // 退出递归
    return;
  } else {
  // stringA仍然比stringB短,进入下一次等待和递归
    setTimeout(()=>{
      stringA.value += stringB.value.charAt(stringA.value.length);
      print(stringA, stringB);
    }, 50);
  }
}
</script>

<template>
  <main>
    <p class="text">{{ stringA }}</p>
    <button @click="print"><p class="text">点击开启动态效果</p></button>
  </main>
</template>

<style scoped>
  .text {
    font-size: 30px;
  }
</style>

以上代码效果展示:

前端文字显示动态效果简易版

相关推荐
Devil枫3 分钟前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
阡之尘埃36 分钟前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
尚梦38 分钟前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子1 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山2 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享2 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
程序媛小果2 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot
孙同学要努力3 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20213 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
从兄3 小时前
vue 使用docx-preview 预览替换文档内的特定变量
javascript·vue.js·ecmascript