前端黑科技演示:Vue3 + SSE 实现动态打字效果

boyanx2周前技术教程2

连接SSE

<script setup>
import { ref,onMounted,onUnmounted } from 'vue';
const sse = ref()
const reconnectAttempts = ref(0)
const timer = ref()
onMounted(()=>{
initSSE();
})
onUnmounted(() => {
if (sse.value) {
sse.value.close();
}
// 清除定时器
clearTimeout(timer.value);
});
const initSSE = () => {
sse.value = new EventSource(`http://192.168.16.18:8888/sse/subscribe?userId=1`);
sse.value.onopen = function (e) {
console.log(e, "连接成功");
reconnectAttempts.value = 0; // 重置重连次数
};
sse.value.onmessage = (event) => {
console.log(event.data)
}
sse.value.onerror = (error) => {
console.error("SSE 连接出错:", error);
sse.value.close();
sse.value = null;
// 自动重连逻辑
reconnectAttempts.value++;
const reconnectDelay = Math.min(30000, 1000 * Math.pow(2, reconnectAttempts.value)); // 计算重连延迟,最大延迟为30秒
console.log(`将在 ${reconnectDelay} 毫秒后尝试重连...`);
// 等待一定时间后重连
setTimeout(() => {
if (!sse.value) {
console.log("尝试重连 SSE...");
initSSE(); // 递归调用重连
}
}, reconnectDelay);
}
}

返回值加入打字机效果

<script>
import { ref,onMounted,onUnmounted } from 'vue';
const sse = ref()
const reconnectAttempts = ref(0)
const contentList = ref([])//对话列表
const fullText = ref("")
const timer = ref()
onMounted(()=>{
initSSE();
})
onUnmounted(() => {
if (sse.value) {
sse.value.close();
}
// 清除定时器
clearTimeout(timer.value);
});
// 打字机效果的方法
const typeWriterEffect = () => {
if (fullText.value.length > 0) {
contentList.value[contentList.value.length - 1].content += fullText.value[0];
fullText.value = fullText.value.slice(1);
// 设置打字速度(例如每 100 毫秒显示一个字符)
timer.value = setTimeout(typeWriterEffect, 100);
if (fullText.value == "") {
//打字机效果结束后关闭加载效果,这里可以自由发挥
contentList.value[contentList.value.length - 1].show = false
}
//滚动到底部的距离
scrollToBottom();
}
};
const initSSE = () => {
sse.value = new EventSource(`http://192.168.16.18:8888/sse/subscribe?userId=1`);
sse.value.onopen = function (e) {
console.log(e, "连接成功");
reconnectAttempts.value = 0; // 重置重连次数
};
sse.value.onmessage = (event) => {
console.log(event.data)
fullText.value += event.data;
// 开始打字机效果
typeWriterEffect();
}
sse.value.onerror = (error) => {
console.error("SSE 连接出错:", error);
sse.value.close();
sse.value = null;
// 自动重连逻辑
reconnectAttempts.value++;
const reconnectDelay = Math.min(30000, 1000 * Math.pow(2, reconnectAttempts.value)); // 计算重连延迟,最大延迟为30秒
console.log(`将在 ${reconnectDelay} 毫秒后尝试重连...`);
// 等待一定时间后重连
setTimeout(() => {
if (!sse.value) {
console.log("尝试重连 SSE...");
initSSE(); // 递归调用重连
}
}, reconnectDelay);
}
}
</script>

这时候根据SSE发送的数据流界面已经完成了,样式还需要优化(现在是纯文字的界面),下一章介绍样式的优化,展示的代码编辑器样式优化。

相关文章

秘塔AI推出“极速”模型,响应速度达400 tokens/秒,AI搜索实现“秒回”

智东西AI前瞻(公众号:zhidxcomAI)作者 | 江宇编辑 | 漠影智东西AI前瞻5月27日消息,秘塔AI搜索今日宣布推出其全新“极速”模型,实现了在单张H800 GPU上高达400 token...

有了这款在线笔记 碎片化学习和剪藏都不愁

现在大家都忙得脚不沾地,想系统学习很难,碎片化学习就成了提升自我的重要方式。可零碎时间里学到的知识、看到的干货,要是没有好工具整理,很容易就丢了。这些年我测评过不少在线笔记软件,今天挑出几款真正能解决...

AI输入法越来越聪明,但我们打字反而变慢了

这两年很多人都换上了所谓“AI输入法”,不管是手机端还是电脑端,只要一打字,推荐词组就像开了外挂一样飞快弹出。一开始你觉得自己成了效率高手,几乎不用动脑,AI就能帮你预测下一句。但用久了你可能会发现一...

想要提高打字速度,记住电脑键盘,手指分工!

打字时双手的十个手指都有明确的分工,只有按照正确的手指分工打字,才能实现盲打和提高打字速度...

3D高斯泼溅,可输入视图量高达500,推理速度提升3倍,内存少80%

ZPressor能高效压缩3D高斯泼溅(3DGS)模型的多视图输入,解决其在处理密集视图时的性能瓶颈,提升渲染效率和质量。通过信息瓶颈原理,将视图分为锚点和支持集,利用交叉注意力机制压缩信息,显著降...

番茄小说打字录入员怎么申请?(番茄小说打字录入员官网)

番茄小说本身通常不会直接对外招聘单纯的打字录入员岗位,但如果想从事相关工作,可参考以下途径和方法来尝试申请:通过番茄小说合作方或外包公司1. 招聘网站搜索 ○ 在智联招聘、BOSS直聘、前程无忧等大型...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。