关键词:
以创建一个自动回复的聊天机器人为例
一、界面准备
先搭一个界面
<header>
<h2>聊天机器人</h2>
</header>
<ul class="message-list" id="message-list">
<li class="message-list__item-robot"><div>
你好,我是聊天机器人
</div></li>
<li class="message-list__item-user"><div>
你好
</div></li>
</ul>
<!--输入区-->
<div class="message-send ">
<textarea id="inputArea"></textarea>
<button id="sendMsgButton">发送</button>
</div>
*
margin: 0;
padding: 0;
header
background-color:dodgerblue;
color:white;
padding:15px 0px;
display:flex;
justify-content: center;
.message-list
height: 280px;
padding: 10px;
overflow: auto;
.message-list__item-robot,
.message-list__item-user
margin-bottom: 10px;
display: flex;
.message-list__item-user
flex-direction: row-reverse;
.message-list__item-robot div
padding: 7px;
border-radius:5px;
background:lightgray;
.message-list__item-user div
padding: 7px;
border-radius:5px;
background:dodgerblue;
color:white;
.message-send
display: flex;
height: 100px;
.message-send
border-top:1px solid lightgray;
height:150px;
display:flex;
.message-send textarea
outline:none;
border:none;
flex-grow: 1;
padding:7px;
font-size: 16px;
.message-send button
border:none;
width:50px;
background:dodgerblue;
color:white;
效果如下:
二、业务逻辑
整体的事件流程
三、js代码
按照业务逻辑循序渐进:
1.获取输入的消息
在这里要实现的功能是监听发送按钮的点击事件, 然后在事件触发的那个函数里:
- 找到文本输入框,获得输入框里的用户输入文本消息
- alert到屏幕上
- 清空输入框
// 找到发送按钮
var sendMsgButton = document.getElementById("sendMsgButton")
// 找到输入框
var inputArea = document.getElementById("inputArea")
// 发送按钮的点击事件
sendMsgButton.onclick = function (e)
// 获取输入框文字
var userMsg = inputArea.value;
// 弹窗
alert(userMsg)
// 清空输入框
inputArea.value = ''
2.发送输入的消息
把输入框获取到的信息添加到消息列表,即在页面的ul列表里添加一个节点:
1.创建一个li节点
2.给这个节点添加类名
3.创建一个div标签
4.给这个div标签加上消息内容
5.把这个li节点添加到界面上去
// 找到发送按钮
var sendMsgButton = document.getElementById('sendMsgButton')
// 找到输入框
var inputArea = document.getElementById('inputArea')
// 找到聊天列表
var msgList = document.getElementById('message-list')
// 监听点击事件
sendMsgButton.addEventListener('click', function(e)
// 获取输入框文字
var userMsg = inputArea.value;
// 清空输入框
inputArea.value = ''
//新增记录
var li_user=document.createElement('li')
li_user.className='message-list__item-user'
var div_user=document.createElement('div')
div_user.innerText=userMsg
//添加至聊天记录中
li_user.appendChild(div_user)
msgList.appendChild(li_user)
)
3.获取机器人的消息
先用一个数组存放模拟机器人说的话,从上面那个数组里随机选取一条数据作为机器人的回复
//模拟数据
var data = [
'我是聊天机器人,你好啊',
'今天天气不错哎',
'手机快没电了,回聊呗',
'我去洗澡了,待会聊呗'
]
// 随机选取一条
var randomNumber = Math.floor(Math.random() * data.length)
var botMsg=data[randomNumber]
console.log(botMsg)
4.完成聊天机器人
和新增用户消息一样,把新增机器人的消息合并到前面的代码
//模拟数据
var data = [
'我是聊天机器人,你好啊',
'今天天气不错哎',
'手机快没电了,回聊呗',
'我去洗澡了,待会聊呗'
]
// 找到发送按钮
var sendMsgButton = document.getElementById('sendMsgButton')
// 找到输入框
var inputArea = document.getElementById('inputArea')
// 找到聊天列表
var msgList = document.getElementById('message-list')
// 监听点击事件
sendMsgButton.addEventListener('click', function(e)
// 获取输入框文字
var userMsg = inputArea.value;
// 清空输入框
inputArea.value = ''
//新增记录
var li_user=document.createElement('li')
li_user.className='message-list__item-user'
var div_user=document.createElement('div')
div_user.innerText=userMsg
//添加至聊天记录中
li_user.appendChild(div_user)
msgList.appendChild(li_user)
// 随机选取一条模拟数据回复
var randomNumber = Math.floor(Math.random() * data.length)
var botMsg=data[randomNumber]
var li_bot=document.createElement("li")
li_bot.className="message-list__item-robot"
var div_bot=document.createElement("div")
div_bot.innerText = botMsg
//添加至聊天记录中
li_bot.appendChild(div_bot)
msgList.appendChild(li_bot)
)
5.最终结果
可以看到用户发送消息和机器人发送消息的代码有很多重复,所以独立出来作为一个单独的函数
/**
* 统一的添加消息函数
* @param msg 需要添加的消息
* @param className 消息节点的类名
*/
function sendMsg(msg, className)
//创建元素
var li=document.createElement('li')
li.className=className
var div=document.createElement('div')
div.innerText=msg
//添加至聊天记录中
li.appendChild(div)
msgList.appendChild(li)
合并代码:
//模拟数据
var data = [
'我是聊天机器人,你好啊',
'今天天气不错哎',
'手机快没电了,回聊呗',
'我去洗澡了,待会聊呗'
]
// 找到发送按钮
var sendMsgButton = document.getElementById('sendMsgButton')
// 找到输入框
var inputArea = document.getElementById('inputArea')
// 找到聊天列表
var msgList = document.getElementById('message-list')
/**
* 统一的添加消息函数
* @param msg 需要添加的消息
* @param className 消息节点的类名
*/
function sendMsg(msg, className)
//创建元素
var li=document.createElement('li')
li.className=className
var div=document.createElement('div')
div.innerText=msg
//添加至聊天记录中
li.appendChild(div)
msgList.appendChild(li)
// 监听点击事件
sendMsgButton.onclick = function(e)
// 获取输入框文字
var userMsg = inputArea.value;
// 清空输入框
inputArea.value = ''
//发送用户消息
sendMsg(userMsg,"message-list__item-user")
// 随机选取一条模拟数据回复
var randomNumber = Math.floor(Math.random() * data.length)
var botMsg=data[randomNumber]
//发送机器人消息
sendMsg(botMsg,"message-list__item-robot")
效果如下:
输入消息并点击发送会随机弹出回复,消息记录较多时中间的列表可滑动
参考:
前端入门:https://www.zhihu.com/question/32314049/answer/713711753
然代码:https://www.qsxqd.com/
前端笔记四前后端通信实例(http协议和ajax)(代码片段)
...备工作js和界面部分和前面的笔记一样【前端笔记】二、JavaScript实例通信部分【前端笔记】三、前后端通信(http协议和Ajax)回顾发送请求的方法://需要发送的消息varmsg='hello'//创建一个XHR对象varxhr=newXMLHt... 查看详情
web前端开发笔记——第四章javascript程序设计第一节输出数据(代码片段)
目录一、JavaScript的定义二、JavaScript的创建和使用(一)内嵌JavaScript代码(二)引用JavaScript文件三、JavaScript输出数据(一)alert()弹出警告框(二)访问HTML元素(三)写至HTML文档( 查看详情
javascript学习笔记(代码片段)
Javascript学习笔记ES6一、ES6简介二、ES6的新增语法①、let关键字②、let的经典面试题③、const关键字④、let、const、var的区别⑤、解构赋值⑥、箭头函数⑦箭头函数面试题⑧、剩余参数三、ES6的内置对象扩展①、Array的扩展方法②... 查看详情
javascript学习笔记(代码片段)
Javascript学习笔记一、构造函数和原型1、概述2、构造函数1、利用构造函数创建对象2、静态成员和实例成员3、构造函数的问题4、构造函数原型prototype5、对象原型__proto__6、constructor构造函数7、构造函数、实例、原型对象三者之间... 查看详情
web前端开发笔记——第四章javascript程序设计第二节变量(代码片段)
目录一、JavaScript中的注释二、变量的命名规则三、变量声明以及赋值四、变量作用域五、变量提升一、JavaScript中的注释JavaScript中单行注释通过“//”,多行注释通过“/*”开头并以“*/”结尾。二、变量的命名规则JavaScript中... 查看详情
web前端开发笔记——第四章javascript程序设计第三节数据类型(代码片段)
目录一、基本数据类型(一)String类型(二)Number类型1、字面量2、无穷大3、非数值(三)Boollean类型(四)Undefined类型和Null类型二、引用数据类型(一)Object类型(二)数组类型... 查看详情
web前端开发笔记——第四章javascript程序设计第五节数组(代码片段)
...)数组的搜索六、数组的截取和合并一、数组的创建JavaScript中数组和其它语言不一样,它的一个数组中可以存放多种类型的元素,即数组每一项可以是任何一种数据类型的数据,且数组的大小是可以动态调整的... 查看详情
html笔记:前端-移动端下拉刷新-2.javascript通过窗口引入(代码片段)
swift笔记:ios与javascript的交互(二):javascriptcore:5。javascript调用native(代码片段)
swift笔记:ios与javascript的交互(二):javascriptcore:11。暴露(代码片段)
swift笔记:ios与javascript的交互(二):javascriptcore:8。调用引入的javascript-调用(代码片段)
swift笔记:ios与javascript的交互(二):javascriptcore:7。调用引入的javascript-引入方法(代码片段)
入门javascript?看懂这篇文章就够了!——web前端系列学习笔记(代码片段)
文章目录JavaScript简介什么是JavaScript?JavaScript的构成JavaScript特点JavaScript基础知识JavaScript的引入方式1.将JS代码嵌入在元素"事件"中2.内嵌式3.外链式JavaScript数据类型JavaScript变量JavaScript函数JavaScript对象JavaScript事件处理Ja... 查看详情