Js 如何实现一个类似 chatGPT 打字机效果

d496f5a0a512e99f73d27148ad7811c6.png

在使用chatGPT的时候,会有一个打字机的效果,以下是分别使用原生JsVue实现

96bba45857c70954491aafeb686b61b4.gif

原生 JS 实现

如下是示例代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Printer 打字机效果</title><style>* {margin: 0;border: 0;padding: 0;font-family: "Courier New", Courier, monospace;}#window {width: 600px;height: 400px;background-color: black;margin: 100px auto;box-shadow: 0 0 10px rgba(0, 0, 0, 0.8);}#title-bar {width: 595px;height: 20px;line-height: 20px;padding-left: 5px;font-size: 14px;background-color: #eee;font-family: Consolas, serif;}#title-bar span:before {content: "\25cf";}#title-bar span {font-size: 24px;}#close {color: red;}#min {color: yellow;}#max {color: #00FF00;}tilte-title {font-family: 'Arial Black', SimHei;font-weight: bold;}#show-board {width: 580px;height: 360px;background-color: #333;color: #eee;padding: 10px;font-family: "Courier New", Courier, monospace, Consolas, serif;}</style>
</head><body><div id="window"><div id="title-bar"><span id="close"></span><span id="min"></span><span id="max"></span><strong id="tilte-title">&nbsp;Console</strong></div><div id="show-board"></div></div><script>(function(root, factory){if(typeof define === 'function' && define.amd){define([], factory);}else{root.Printer = factory(root);}
}(this, function(root){var Printer = {};Printer.printer = {"version": "0.0.1"};var init_options = {"speed" : 50,  //文字的速度"selector" : 'canvas',  //要打印到的标签的ID   "startIndex" : 0,  //从第几个字符开始打印"endIndex" : 0,  //打印到第几个字符结束"hasCur" : true,  //是否有光标"curId" : 'cur',  //光标的ID"curStr" : '_',  //光标字符"curStyle" : 'font-weight: bold;', //光标的样式(CSS样式)"curSpeed" : 100,  //光标的速度(ms)"lnStr": ""};var str = "", options = init_options;var flwCurTimer, dom, curObj, reStr='', curSwitch,index=0;Printer.init = function(arg_str, arg_options){str = arg_str;for( var option in arg_options ){options[option] = arg_options[option];}dom = document.getElementById(options.selector);index = options.startIndex;options.endIndex = options.endIndex == 0 ? str.length : options.endIndexoptions.hasCur && flwCur();return this;}Printer.print = function(){ //打印函数for(var i=0; i<str.length; i++) {(function(index){setTimeout(function(){ if (str.charAt(index) === '\n'){reStr += '<br>' + options.lnStr;} else {reStr += str.charAt(index);}dom.innerHTML= options.lnStr + reStr}, options.speed * (index + 1))})(i);}setTimeout(function(){if(options.hasCur){var element = document.createElement("span");element.id = options.curIddom.appendChild(element);curObj = document.getElementById(options.curId);clearTimeout(flwCurTimer);setInterval(chCur, options.curSpeed);}}, options.speed * str.length)}function flwCur(){ //跟随光标dom.innerHTML += '<span id="'+options.curId+'" style="'+options.curStyle+'">'+options.curStr+'</span>';flwCurTimer = setTimeout(flwCur, 1.5 * options.speed);}function chCur(){ //闪烁光标curObj.innerHTML = curSwitch ? options.curStr : "";curSwitch = !curSwitch}return Printer;
}));</script><script>var str = 'itclanCoder\n';str += 'https://coder.itclan.net\n';str += '书以启智,技于谋生,活出斜杠\n';str += '微信公众号:itclanCoder\n';str += 'exit\n';Printer.init(str, {selector: 'show-board',lnStr: 'root@itclanCoder ~/ # '}).print();</script>
</body></html>

#Vue版本实现

如下是使用vue方式实现

<template><div class="daziji-box"><div class="content"></div><div class="textarea"><textarea v-model="message" placeholder="请输入文字后回车看看效果" @keydown.enter="handleEnter"></textarea></div></div>
</template><script>
export default {data () {return {msg:'你好,我是模仿ChatGPT的打字机效果',message:'',}},mounted() {this.autoWriting(0)},methods:{handleEnter() {event.preventDefault();//阻止enter键回车换行this.msg=this.messageconst dom = document.querySelector('.content')dom.innerHTML = ''this.writing(0)this.message=''},autoWriting(index){const dom = document.querySelector('.content')const data = this.msg.split('')if (index < data.length) {dom.innerHTML += data[index]setTimeout(this.autoWriting, 200, ++index)}}}
}
</script><style>.daziji-box .content {margin: 20px 0;
}    
.daziji-box .content::after{content: '_';animation: blink 1s infinite
}
@keyframes blink{from{opacity: 0;}to{opacity: 1;}
}</style>

分析

实现这个打字机的效果,核心逻辑,主要是在autoWriting这个方法的实现,页面初始化加载自动打印

通过setTimeout设置200毫秒的时间间隔, 每隔200毫秒向dom中插入对应的数据,先将输入的字符串进行打散(split),然后一个一个插入到DOM节点

至于那个光标闪烁,是通过一个伪类after将光标定在这个class的最后面, 并使用动画的关键帧,实现显示隐藏的循环动画,模拟光标的闪烁

来自爱客来智能助手答案

以下是爱客来智能助手的回答

实现类似 chatGPT 打字机效果的方法可以通过 JavaScript 的 setTimeout 方法和字符串截取来实现,步骤如下:

  1. 将要打印的文本内容存储到一个字符串变量中;

  2. 通过 DOM 操作,找到需要输出的文本区域;

  3. 设置一个变量用于记录当前输出的字符数,初始值为 0;

  4. 设置一个变量用于存储 setTimeout 方法的返回值,初始值为 null;

  5. 使用 setTimeout 方法,每隔一定时间截取文本字符串前面的 n 个字符并显示到文本区域中,同时更新当前输出的字符数;

  6. 当输出完整个文本字符串后,停 setTimeout 方法。以下是具体代码实现:

const text = "这是要输出的文本内容,类似PT 的打字效果"; 
const typing = () => { const output = document.getElementById("output");
let count = 0; 
let timer = null; const print = () => {const subText = text.substring(0, count + 1); output.textContent = subText; count++; if (count === text.length) {clearTimeout(timer); 
} else {timer = setTimeout(print, 50); // 每隔 50 毫秒输出一个字符 } 
}; print(); 
}; 
typing();

这段代码会在页面载入时自动执行 typing 函数,实现类似 chatGPT打字机效果的效果。同时,可以通过更改 setTimeout 方法的第二个参数以调整打印速度

以下也是爱客来智能助手另外一个答案

要实现类似 chatGPT 打字机效果,我们需要用 ·JavaScript· 来模拟打字过程。下面是一个简单的实现方法:

  1. 定义一个字符串,表示要打出的完整文本。比如:const text = "Hello, world!"

  2. 将该字符串转化为一个字符数组。比如:const characters = text.split("")

  3. 定义一个计数器变量,表示已经显示出来的字符数。初始值为 0。

  4. 创建一个定时器,每隔一定时间(比如 100ms)将下一个字符显示出来。可以使用 setInterval 函数实现。

  5. 在每次定时器回调函数中,使用 slice 函数从字符数组中取出前 counter + 1 个字符拼接成一个新字符串,然后将该字符串设置为要在页面上显示的文本。例如:document.getElementById("text").innerText = characters.slice(0, counter + 1).join("")

  6. 在每个定时器回调函数中,将计数器加 1。

  7. 当计数器等于字符数组的长度时,停止定时器。例如:if (counter === characters.length) clearInterval(timer)

下面是一份示例代码:

const text = "Hello, world!";
const characters = text.split("");
let counter = 0;
const speed = 100; // 打字的速度,单位为毫秒const timer = setInterval(() => {// 拼接出当前应该显示的文本const currentText = characters.slice(0, counter + 1).join("");// 将文本显示在页面上document.getElementById("text").innerText = currentText;// 增加计数器counter++;// 如果已经显示完全部字符,停止定时器if (counter === characters.length) {clearInterval(timer);}
}, speed);

需要注意的是,这只是一个简单的实现方法,还有很多细节需要考虑,比如打字结束后是否要添加一些额外的操作,比如将光标移动到另一个位置等等。

总结

总得来说,实现这个打字机效果,是将这个字符进行打散成数组,然后通过定时器,设置间隔时间,一个一个的插入到指定的DOM节点上,就可以了的

56275f365cb93dcd576f2a1c12c413a9.png

b4449c7043a9796eb0db8cd9e614deb8.png

50194c2b1ebc6786a6097f66b9012684.png

当在网页浏览器的地止栏中输入URL或关键词时,web页面是如何呈现的?

2023-05-22

7bbbc61680dc9bd7db52d98866c47908.jpeg

想转正?不存在的,你被证明不符合录用条件,解除通知书收好

2023-05-18

362324e4fb0aeb6624401255cab3954b.jpeg

关于左耳朵耗子的一些创业,工作,生活,技术,学习等思考

2023-05-17

ec81e320c72dff77700d6e10b2a7e02f.jpeg

47岁技术大佬陈皓(左耳朵耗子)去世,叛逆人生不断创业,网友们纷纷留言悼念

2023-05-15

59bb0a0b889b7c54b4d0681e51f31e36.jpeg

css几种高效方案如何适配首屏可视区区域

2023-05-15

70763673632705142abf65b3cff05f4b.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41898.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲&#xff0c;总结了一些自然语言模型相关的重要技术&#xff0c;以及各个主流公司的研究方向和进展&#xff0c;和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

chatgpt赋能python:Python中怎么打开图片

Python中怎么打开图片 在Python中&#xff0c;打开并处理图片是常见的任务。本文将介绍如何使用Python打开和显示图像文件&#xff0c;以及一些其他关于处理图像的有用技巧。 打开图片 Python提供了许多库来处理图片。其中最流行的是Pillow和OpenCV&#xff0c;但是还有其他…

chatgpt赋能python:使用Python修改照片属性:让你的照片更美丽

使用Python修改照片属性&#xff1a;让你的照片更美丽 介绍 随着数字摄影的发展&#xff0c;人们不再满足于只是拍照&#xff0c;更追求照片的美感和创意。虽然相机和手机等设备都已经默认提供了各种滤镜和编辑功能&#xff0c;但有时它们并不能满足我们的要求。那么&#xf…

独家 | Scikit-LLM:Sklearn邂逅大语言模型

作者&#xff1a;Fareed Khan翻译&#xff1a;陈之炎 校对&#xff1a;赵茹萱本文约2600字&#xff0c;建议阅读8分钟 本文为您介绍文本分析的工具包Scikit-LLM。 标签&#xff1a;LLM Scikit-LLM是文本分析的游戏规则改变者&#xff0c;它将功能强大的ChatGPT语言模型和scikit…

LLM应用的技术栈与设计模式详解

大型语言模型是构建软件的强大新原语。 但由于它们是如此新&#xff0c;并且其行为与普通计算资源如此不同&#xff0c;因此如何使用它们并不总是显而易见的。 在这篇文章中&#xff0c;我们将分享新兴 LLM 应用程序的参考架构。 它展示了我们所见过的人工智能初创公司和先进科…

GPT模型微调教程:打造您专属的ChatGPT模型

一、前言 通过前面对大语言模型的介绍&#xff0c;我们了解到&#xff0c;其实像目前已经发布的一些主流大语言模型如OpenAI公司发布的的GPT-3.5、GPT-4、Google发布的Bard和PaLM 2多模态模型、Anthropic最近推出的Claude 2、亦或是国内清华大学联合智普AI发布的ChatGLM 2等都…

[AI医学] ChatDoctor:借助医学知识库生成微调样本构建医疗领域大模型

关键词&#xff1a;AI医疗&#xff0c;医疗大模型&#xff0c;chatdoctor&#xff0c;大模型finetuning&#xff0c;基于疾病知识库的数据生成 ChatDoctor 在LLaMA模型的基础上进行fine tuning训练&#xff0c;样本数据采用100k在线真实医患对话&#xff0c;同时加入自主知识…

LLM/ChatGPT与多模态必读论文150篇(已更至第100篇)

目录 前言 第一部分 OpenAI/Google的基础语言大模型(11篇&#xff0c;总11篇) 第二部分 LLM的关键技术&#xff1a;ICL/CoT/RLHF/词嵌入/位置编码/加速/与KG结合等(34篇&#xff0c;总45篇) 第三部分 Meta等公司发布的类ChatGPT开源模型和各种微调(7篇&#xff0c;总52篇) …

讲课大师 把微信消息同步转发到企业微信中

讲课大师现在可以把微信中的语音、文字、图片等消息&#xff0c;转播到企业微信中了。开发这个功能&#xff0c;花了快三周的时间&#xff0c;主要是各种事情把我弄得太苦逼&#xff0c;让我无法集中精力&#xff0c;感谢上海杜总红包的鼓励&#xff0c;现在终于可以发布第一个…

好文转载 【ChatGPT】ChatGPT+MindShow三分钟生成PPT

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 第一步&#xff1a;获取PPT内容大概&#xff1a; 1.打开ChatGPT镜像 2.向他提问&#xff0c;提问格式如下&#xff0c;主题替换成你想获得的信息。比如某本书的拆解&#xff0c;自媒…

全面上新!阿里 2023 版(Java 岗)面试突击手册,Github 已标星 37K

程序员面试背八股&#xff0c;几乎已经是互联网不可逆的一个形式了。自从面试**八股文火了之后&#xff0c;网上出现了不少 Java 相关的面试题&#xff0c;很多朋友盲目收集背诵&#xff0c;**但网上大部分的面试题&#xff0c;大多存在这几个问题&#xff1a;第一&#xff0c;…

来阿里一年后我迎来了第一次工作变动....

你怎么不更新啦&#xff1f;怎么最近动态也变少啦&#xff1f;都去干吗了&#xff1f;工作很忙么&#xff1f; 算起来我也阶段性停更一年半了&#xff0c;这一年半不仅是在不断尝试自媒体不同的内容和方向&#xff0c;工作上的巨大转变也推着我去学习尝试了很多全新的东西。 …

阿里P8新年自爆内部使用的十万字面试手册

这份面试手册本来是我们部门面试时自用的【大厂的员工很辛苦的&#xff0c;不仅要敲代码还要去帮忙内推和面试】&#xff0c;可后来越来越多的朋友找到我&#xff0c;让我帮他们给一些面试的资料和面试上的指引&#xff0c;而且这些关系也不太好拒绝&#xff0c;我本就不是那种…

946页神仙文档, 四面阿里斩获offer,直接定级P7级

前言 最近气温逐渐回暖&#xff0c;几个朋友聚在一起聊天的时候统一发现&#xff0c;新的一波招聘旺季&#xff0c;马上要到来&#xff0c;毕竟年一过就金三银四了&#xff0c;这次的招聘依旧竞争压力山大&#xff0c;作为一个开发人员&#xff0c;你是否面上了自己理想的公司…

阿里高效沟通的秘密:向上沟通,跨部门沟通,PREP汇报...这5招绝了!

点击“技术领导力”关注∆ 每天早上8:30推送 来源&#xff1a;淘系技术 作者&#xff1a;鲁佳(鹿迦) 世界上有两件最难的事&#xff1a;把别人的钱装进自己的口袋&#xff1b;把自己的思想装进别人的脑袋。 为什么沟通那么重要 谁都知道在工作中沟通是非常重要的&#xff0…

阿里巴巴6大行业报告免费分享啦!

云栖君导读&#xff1a;飞天战略营将全方位研究人工智能、大数据与关键行业的合作、联动&#xff01;更有前沿案例深度解读成功企业的发展突破点&#xff0c;帮你抢占科技红利&#xff01;全球前沿科技领域的热门新闻评论为你带来前瞻性、专业性的阅读体验&#xff01; 飞天战略…

聊聊我在阿里第一年375晋升的心得

前言 思来想去&#xff0c;觉得这个事情除了领导赏识大佬抬爱之外&#xff0c;还是挺不容易的&#xff0c;主观认为有一定的参考价值&#xff0c;然后也是复盘一下&#xff0c;继续完善自己。 绩效 首先晋升的条件就是要有个好绩效&#xff0c;那么我们就先基于绩效这个维度…

在阿里晋升3次,4年拿下P8岗位,这份pdf或许对你有帮助

前言&#xff1a; 每一个互联网工作者都拥有一个阿里梦&#xff0c;而这个阿里梦的实现&#xff0c;除了幸运&#xff0c;还要靠努力。 初入阿里&#xff0c;是P5的位置进去的&#xff0c;当时校招顺利&#xff0c;很快就接到阿里的意向书&#xff0c;最后成功入职阿里。这个职…

在阿里晋升3次,5年拿下P8岗位,这份pdf记录了我的整个成长过程

前言&#xff1a; 每一个互联网工作者都拥有一个阿里梦&#xff0c;而这个阿里梦的实现&#xff0c;除了幸运&#xff0c;还要靠努力。 初入阿里&#xff0c;是P5的位置进去的&#xff0c;当时校招顺利&#xff0c;很快就接到阿里的意向书&#xff0c;最后成功入职阿里。这个职…

公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档

移动应用App已经渗透到每个人的生活、娱乐、学习、工作当中&#xff0c;令人激动、兴奋且具有创造性的各种App犹如雨后春笋般交付到用户手中。各类智能终端也在快速发布&#xff0c;而开发者对于全球移动设备的质量和性能却掌握甚少&#xff0c;App与设备的兼容性问题常常导致用…