前端开发 -- 自动回复机器人【附完整源码】

一:效果展示

本项目实现了一个简单的网页聊天界面,用户可以在输入框中输入消息,并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容,通过关键字匹配来生成自动回复。
在这里插入图片描述

二:源代码分享

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>关键字自动回复</title><style>body {font-family: Arial, sans-serif;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #f0f0f0;overflow: hidden;}.chat-title {text-align: center;padding: 10px;font-weight: bold;border-bottom: 2px solid #ccc;}.chat-container {width: 300px;border: 2px solid #ccc;border-radius: 5px;background-color: #fff;display: flex;flex-direction: column;max-height: 90vh;}.chat-window {flex: 1;padding: 10px;overflow-y: auto;border-bottom: 2px solid #ccc;}.chat-window div {display: flex;margin-bottom: 10px;}.user-message {justify-content: flex-end;color: #007bff;}.bot-message {justify-content: flex-start;color: #28a745;}.message-content {display: flex;align-items: center;}.message-content img {width: 30px;height: 30px;border-radius: 50%;margin-right: 5px; }.message-text {max-width: 200px; padding: 5px;border-radius: 5px;word-wrap: break-word; white-space: normal; }.user-message .message-content {gap: 5px;}.user-message .message-text {background-color: #e9f5ff;}.bot-message .message-text {background-color: #d1f9d1;}.input-container {display: flex;padding: 10px;}#userInput {flex: 1;padding: 5px;border: 1px solid #ccc;border-radius: 3px;}#sendButton {padding: 5px 10px;margin-left: 5px;border: 1px solid #ccc;background-color: #007bff;color: #fff;border-radius: 3px;cursor: pointer;}</style>
</head>
<body><div class="chat-container"><div class="chat-title">自动回复机器人</div><div class="chat-window" id="chatWindow"></div><div class="input-container"><input type="text" id="userInput" placeholder="请输入......"><button id="sendButton">发送</button></div></div><script>document.addEventListener('DOMContentLoaded', () => {const chatWindow = document.getElementById('chatWindow');const userInput = document.getElementById('userInput');const sendButton = document.getElementById('sendButton');sendButton.addEventListener('click', sendMessage);userInput.addEventListener('keypress', (e) => {if (e.key === 'Enter') {sendMessage();}});function sendMessage() {const userMessage = userInput.value.trim();if (userMessage) {addMessage(userMessage, 'user');// 使用本地生成的回复const reply = generateAIReply(userMessage);addMessage(reply, 'bot');userInput.value = '';}}function generateAIReply(message) {message = message.toLowerCase();if (message.includes("你好") || message.includes("hi")) {return "你好!有什么我可以帮助你的吗?";} else if (message.includes("你想我吗")) {return "我当然想和你聊天啦!";} else if (message.includes("你在干嘛")) {return "我正在用人类的语言和你聊天呢!";} else if (message.includes("现在几点")) {return "当前时间为:" + new Date().toLocaleTimeString();} else {return "我不太明白你的意思,可以说得更清楚一些吗?";}}function addMessage(message, sender) {const messageElement = document.createElement('div');messageElement.className = sender === 'user' ? 'user-message' : 'bot-message';const messageContent = document.createElement('div');messageContent.className = 'message-content';const text = document.createElement('span');text.className = 'message-text';text.textContent = message;messageContent.appendChild(text);const avatar = document.createElement('img');if (sender === 'user') {avatar.src = '头像1.jpg'; // 用户头像链接messageContent.appendChild(avatar); } else {avatar.src = '头像2.jpg'; // 机器人头像链接messageContent.insertBefore(avatar, text); }messageElement.appendChild(messageContent);chatWindow.appendChild(messageElement);chatWindow.scrollTop = chatWindow.scrollHeight;}});</script>
</body>
</html>

三:代码分析

1.HTML结构
<!DOCTYPE html>
<!-- 定义HTML文档的语言为英文 -->
<html lang="en">
<head><meta charset="UTF-8"><!-- 设置视口,使页面在移动设备上以合适的比例显示,宽度等于设备宽度,初始缩放比例为1 --><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 设置网页的标题 --><title>关键字自动回复</title><style>/* CSS样式在这里定义,用于美化页面 */</style>
</head>
<body><!-- 定义一个容器,用于包含聊天界面的所有元素 --><div class="chat-container"><!-- 定义聊天窗口的标题 --><div class="chat-title">自动回复机器人</div><!-- 定义聊天窗口,用于显示聊天内容,设置id以便JS操作 --><div class="chat-window" id="chatWindow"></div><!-- 定义一个容器,包含输入框和发送按钮 --><div class="input-container"><!-- 定义一个文本输入框,用户在此输入信息 --><input type="text" id="userInput" placeholder="请输入......"> <!-- 定义一个按钮,用户点击后发送输入框中的内容 --><button id="sendButton">发送</button>            </div></div><script>// JavaScript代码在这里,用于实现页面的交互功能</script>
</body>
</html>
  • <head>部分:定义了文档的元数据,包括窗口设置和标题,以及内嵌的CSS样式。
  • <body>部分:包含一个聊天容器,其中包括聊天标题、聊天窗口和输入容器。
2.CSS结构

body {font-family: Arial, sans-serif;/* 设置页面整体字体为Arial,如果Arial不可用则使用sans-serif作为备用 */display: flex;/* 使用Flexbox布局,使子元素能够灵活排列 */justify-content: center;/* 水平方向上居中对齐子元素 */align-items: center;/* 垂直方向上居中对齐子元素 */height: 100vh;/* 设置页面高度为视口高度的100%,确保页面占满整个屏幕 */margin: 0;/* 移除默认的页面外边距 */background-color: #f0f0f0;/* 设置页面背景颜色为浅灰色 */overflow: hidden;/* 隐藏超出视口的内容,防止滚动条出现 */
}.chat-title {text-align: center;/* 标题文本居中对齐 */padding: 10px;/* 在标题周围添加内边距,使其与边框有一定距离 */font-weight: bold;/* 设置标题字体为粗体 */border-bottom: 2px solid #ccc;/* 在标题下方添加一条2像素宽的灰色边框 */
}.chat-container {width: 300px;/* 设置聊天容器的宽度为300像素 */border: 2px solid #ccc;/* 为聊天容器添加2像素宽的灰色边框 */border-radius: 5px;/* 设置聊天容器的边框圆角为5像素 */background-color: #fff;/* 设置聊天容器背景颜色为白色 */display: flex;/* 使用Flexbox布局,使聊天窗口和输入框能够灵活排列 */flex-direction: column;/* 设置Flexbox方向为垂直,使子元素垂直排列 */max-height: 90vh;/* 设置聊天容器的最大高度为视口高度的90% */
}.chat-window {flex: 1;/* 使聊天窗口占据可用空间的剩余部分 */padding: 10px;/* 在聊天窗口内部添加内边距 */overflow-y: auto;/* 如果内容超出可视区域,允许垂直滚动 */border-bottom: 2px solid #ccc;/* 在聊天窗口底部添加一条2像素宽的灰色边框 */
}.chat-window div {display: flex;/* 使用Flexbox布局,使消息能够灵活排列 */margin-bottom: 10px;/* 在每个消息下方添加10像素的外边距 */
}.user-message {justify-content: flex-end;/* 将用户消息右对齐 */color: #007bff;/* 设置用户消息文本颜色为蓝色 */
}.bot-message {justify-content: flex-start;/* 将机器人消息左对齐 */color: #28a745;/* 设置机器人消息文本颜色为绿色 */
}.message-content {display: flex;/* 使用Flexbox布局,使头像和文本能够水平排列 */align-items: center;/* 垂直居中对齐头像和文本 */
}.message-content img {width: 30px;/* 设置头像宽度为30像素 */height: 30px;/* 设置头像高度为30像素 */border-radius: 50%;/* 设置头像为圆形 */margin-right: 5px;/* 给头像右边添加5像素的外边距 */
}.message-text {max-width: 200px;/* 控制消息文本的最大宽度 */padding: 5px;/* 在消息文本周围添加内边距 */border-radius: 5px;/* 设置消息文本的边框圆角为5像素 */word-wrap: break-word;/* 确保长单词也能换行 */white-space: normal;/* 允许文本内的空白符正常显示,允许换行 */
}.user-message .message-content {gap: 5px;/* 使用gap属性增加头像和文本之间的间距 */
}.user-message .message-text {background-color: #e9f5ff;/* 设置用户消息背景颜色为浅蓝色 */
}.bot-message .message-text {background-color: #d1f9d1;/* 设置机器人消息背景颜色为浅绿色 */
}.input-container {display: flex;/* 使用Flexbox布局,使输入框和按钮能够水平排列 */padding: 10px;/* 在输入容器内部添加内边距 */
}#userInput {flex: 1;/* 使输入框占据可用空间的剩余部分 */padding: 5px;/* 在输入框内部添加内边距 */border: 1px solid #ccc;/* 为输入框添加1像素宽的灰色边框 */border-radius: 3px;/* 设置输入框的边框圆角为3像素 */
}#sendButton {padding: 5px 10px;/* 在按钮内部添加内边距,上下5像素,左右10像素 */margin-left: 5px;/* 在按钮左边添加5像素的外边距,与输入框保持一定距离 */border: 1px solid #ccc;/* 为按钮添加1像素宽的灰色边框 */background-color: #007bff;/* 设置按钮背景颜色为蓝色 */color: #fff;/* 设置按钮文本颜色为白色 */border-radius: 3px;/* 设置按钮的边框圆角为3像素 */cursor: pointer;/* 当鼠标悬停在按钮上时,显示为手型光标,表示可点击 */
}
  • 布局与对齐:使用Flexbox布局来实现元素的居中对齐和分布,使得聊天界面在不同设备上都能保持良好的显示效果。
  • 样式与主题:通过颜色和背景的设置,区分用户消息和机器人消息,增强用户体验。使用圆角、边距和内边距来增加视觉层次和舒适度。
  • 响应式设计:通过设置最大高度和允许滚动,确保聊天窗口在内容过多时不会破坏页面的整体布局。
3.JavaScript结构
document.addEventListener('DOMContentLoaded', () => {// 当DOM内容加载完毕后,执行以下代码const chatWindow = document.getElementById('chatWindow');// 获取页面中ID为'chatWindow'的元素,用于显示聊天消息const userInput = document.getElementById('userInput');// 获取页面中ID为'userInput'的元素,用于用户输入消息const sendButton = document.getElementById('sendButton');// 获取页面中ID为'sendButton'的元素,即发送消息的按钮sendButton.addEventListener('click', sendMessage);// 为发送按钮添加点击事件监听器,点击时调用sendMessage函数userInput.addEventListener('keypress', (e) => {// 为用户输入框添加键盘按键事件监听器if (e.key === 'Enter') {// 如果按下的键是'Enter'(回车键)sendMessage();// 调用sendMessage函数发送消息}});function sendMessage() {// 定义sendMessage函数,用于处理消息发送逻辑const userMessage = userInput.value.trim();// 获取用户输入框的值,并去除首尾空白if (userMessage) {addMessage(userMessage, 'user');// 调用addMessage函数,将用户消息添加到聊天窗口const reply = generateAIReply(userMessage);// 调用generateAIReply函数,生成AI的回复addMessage(reply, 'bot');// 调用addMessage函数,将AI的回复添加到聊天窗口userInput.value = '';// 清空用户输入框}}function generateAIReply(message) {// 定义generateAIReply函数,用于生成AI的回复message = message.toLowerCase();// 将用户消息转换为小写,以便进行不区分大小写的匹配if (message.includes("你好") || message.includes("hi")) {// 如果消息包含"你好"或"hi"return "你好!有什么我可以帮助你的吗?";// 返回AI的问候语}// 其他关键字回复else {// 如果消息不包含上述关键字return "我不太明白你的意思,可以说得更清楚一些吗?";// 返回AI的不理解回复}}function addMessage(message, sender) {// 定义addMessage函数,用于将消息添加到聊天窗口const messageElement = document.createElement('div');// 创建一个div元素,作为消息容器messageElement.className = sender === 'user' ? 'user-message' : 'bot-message';// 根据发送者(用户或AI)设置消息容器的类名const messageContent = document.createElement('div');// 创建一个div元素,作为消息内容的容器messageContent.className = 'message-content';// 设置消息内容容器的类名const text = document.createElement('span');// 创建一个span元素,用于显示消息文本text.className = 'message-text';// 设置消息文本的类名text.textContent = message;// 设置消息文本的内容messageContent.appendChild(text);// 将消息文本添加到消息内容容器中const avatar = document.createElement('img');// 创建一个img元素,用于显示发送者的头像if (sender === 'user') {avatar.src = '头像1.jpg';// 设置头像的图片源为用户头像messageContent.appendChild(avatar);} else {avatar.src = '头像2.jpg';// 设置头像的图片源为AI头像messageContent.insertBefore(avatar, text);}messageElement.appendChild(messageContent);// 将消息内容容器添加到消息容器中chatWindow.appendChild(messageElement);// 将消息容器添加到聊天窗口中chatWindow.scrollTop = chatWindow.scrollHeight;// 将聊天窗口滚动到最底部,以便显示最新消息}
});

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

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

相关文章

【速成51单片机】1.已经学过stm32如何快速入门51单片机——软件下载与安装

引言 本系列专题用于已经熟悉stm32单片机的情况下&#xff0c;快速掌握51单片机。背景是我其实大一大二已经进入学校实验室了&#xff0c;已经学习了stm32单片机&#xff0c;但是现在大三期末考51单片机&#xff0c;实际期末复习更应该看老师给的重点和背书上知识点。但我不想…

node-js Express防盗链

什么是防盗连 一个简单的说明&#xff0c;假如在前端img标签想要引用图片网站上的图片&#xff0c;当你将图片地址放到img标签上想要显示的时候你发现&#xff0c;图片显示不了&#xff0c;这说明网站采用了防盗链。 怎么实现的呢 在请求头中一般会有 Referer&#xff0c;它…

68jQuery【jQuery操作DOM、事件】

jQuery jQuery操作DOM 元素节点的增删改查 创建元素节点 使用$(html)函数动态创建节点元素 函数$(html)只完成DOM元素创建&#xff0c;加入到页面还需要通过元素节点的插入或追加操作&#xff1b;同时&#xff0c;在创建DOM元素时&#xff0c;要注意字符标记是否完全闭合&am…

lin.security提权靶场渗透

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

基于aspose.words组件的word bytes转pdf bytes,去除水印和解决linux中文乱码问题

详情见 https://preferdoor.top/archives/ji-yu-aspose.wordszu-jian-de-word-byteszhuan-pdf-bytes

[python学习笔记]对象、引用、浅复制、深复制

学了这么多年编程&#xff0c;发现在学校都是浑水摸鱼&#xff0c;从来没有精通过一门语言&#xff0c;一个月熟悉python和算法。不积硅步&#xff0c;无以至千里。 本文笔记来自以下博客&#xff0c;请参考原文。 Python&#xff1a;深拷贝与浅拷贝 - 七落安歌 - 博客园 h…

arm架构 uos操作系统离线安装k8s

目录 操作系统信息 安装文件准备 主机准备 主机配置 配置hosts&#xff08;所有节点&#xff09; 关闭防火墙、selinux、swap、dnsmasq(所有节点) 系统参数设置(所有节点) 配置ipvs功能(所有节点) 安装docker&#xff08;所有节点&#xff09; 卸载老版本 安装docke…

Animated Drawings:让纸上的角色动起来

前言 今天介绍的这个工具非常的有意思&#xff1a;它可以让我们在纸上绘画的角色动起来。先一起来看看效果&#xff1a; 准备 首先&#xff0c;我们先准备一张绘画。可以在纸上进行绘制&#xff0c;也可以在电子设备上进行绘制。绘制内容不限&#xff0c;在这里为了方便演示&am…

【WRF模拟】如何得到更佳的WRF模拟效果?

【WRF模拟】如何得到更佳的WRF模拟效果&#xff1f; 模型配置&#xff08;The Model Configuration&#xff09;1.1 模拟区域domain设置1.2 分辨率Resolution (horizontal and vertical)案例&#xff1a;The Derecho of 29-30 June 2012 1.3 初始化和spin-up预热过程案例1-有无…

javaweb 04 springmvc

0.1 在上一次的课程中&#xff0c;我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 其实呢&#xff0c;是我们在浏览器发起请求&#xff0c;请求了我们…

openGauss与GaussDB系统架构对比

openGauss与GaussDB系统架构对比 系统架构对比openGauss架构GaussDB架构 GaussDB集群管理组件 系统架构对比 openGauss架构 openGauss是集中式数据库系统&#xff0c;业务数据存储在单个物理节点上&#xff0c;数据访问任务被推送到服务节点执行&#xff0c;通过服务器的高并…

JS 设置按钮的loading效果

本文是在其他博主的博客JS学习笔记 | 遮罩层Loading实现_jsp loading-CSDN博客基础上&#xff0c;进行实践的。 目录 一、需求 二、Jspcss实现代码 一、需求 在springboot项目中的原始html5页面中&#xff0c;原本的功能是页面加载时&#xff0c;使用ajax向后端发送请求&…

QT线程 QtConcurrent (深入理解)

QT多线程专栏共有16篇文章,从初识线程到、QMutex锁、QSemaphore信号量、Emit、Sgnals、Slot主线程子线程互相传值同步变量、QWaitCondition、事件循环、QObjects、线程安全、线程同步、线程异步、QThreadPool线程池、ObjectThread多线程操作、 moveToThread等线程操作进行了全…

“游戏信息化”:游戏后台系统的未来发展

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该游戏后台系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同…

第十六届“蓝桥杯”全国软件和信息技术专业人才大赛简介及资料大全

蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心主办的一项全国性竞赛&#xff0c;面向全国高校大学生&#xff0c;累计参赛院校超过1200余所&#xff0c;参赛人数达40万人&#xff0c;是我国极有影响力的高校IT类赛事。 “第十六届蓝桥杯全国软件和信息…

电子电气架构 --- 什么是自动驾驶技术中的域控制单元(DCU)?

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所谓鸡汤&#xff0c;要么蛊惑你认命&#xff0c;要么怂恿你拼命&#xff0c;但都是回避问题的根源&…

yolov5及其算法改进

yolov5及其算法改进 1、YOLOV5目标检测简介2、前处理2.1、自适应 Anchor 计算2.2、自适应计算 Anchor 的流程如下:2.3、图像自适应3、YOLOV4与YOLOV5的架构区别3.1、SiLU激活函数3.2、CSPBlock结构图3.3、yolov5的spp改进4、正负样本匹配与损失函数4.1、坐标表示4.2、正负样本…

WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)

项目中要用到样条曲线&#xff0c;必须过顶点&#xff0c;圆滑后还不能太走样&#xff0c;捣鼓一番&#xff0c;发现里面颇有玄机&#xff0c;于是把我多方抄来改造的方法发出来&#xff0c;方便新手&#xff1a; 如上图&#xff0c;看代码吧&#xff1a; -------------------…

阿里云新用户服务器配置

创建和链接实例 创建实例&#xff0c;点击左侧标签栏总的实例&#xff0c; 找到链接帮助 根据帮助中的ip信息&#xff0c;然后启用vscode的ssh链接 ctrlp选择配置&#xff0c;输入公网的ip即可 passwd修改root密码 安装conda 参考 https://blog.csdn.net/adreammaker/arti…

最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解LRMOP1-LRMOP6及工程应用---盘式制动器设计,提供完整MATLAB代码

一、麋鹿优化算法 麋鹿优化算法&#xff08;Elephant Herding Optimization&#xff0c;EHO&#xff09;是2024年提出的一种启发式优化算法&#xff0c;该算法的灵感来源于麋鹿群的繁殖过程&#xff0c;包括发情期和产犊期。在发情期&#xff0c;麋鹿群根据公麋鹿之间的争斗分…