赞
踩
演示案例要完成的效果
实现步骤:
①梳理案例的代码结构
②将用户输入的内容渲染到聊天窗口
③发起请求获取聊天消息
④将机器人的聊天内容转为语音
⑤通过 <audio> 播放语音
⑥使用回车键发送消息
梳理案例的代码结构
①梳理页面的 UI 布局
②将业务代码抽离到 chat.js 中
③了解 resetui() 函数的作用
resetui()的作用是输入文字,会返回页面底部
将用户输入的内容渲染到聊天窗口
- // 为发送按钮绑定点击事件处理函数
- $('#btnSend').on('click', function () {
- var text = $('#ipt').val().trim() // 获取用户输入的内容
- if (text.length <= 0) { // 判断用户输入的内容是否为空
- return $('#ipt').val('')
- }
- // 将用户输入的内容显示到聊天窗口中
- $('#talk_list').append('<li class="right_word"><img src="img/person02.png" /> <span>' + text + '</span></li>')
- resetui() // 重置滚动条的位置
- $(‘#ipt’).val('') // 清空输入框的内容
-
- // TODO: 发起请求,获取聊天消息
- })
发起请求获取聊天消息
- function getMsg(text) {
- $.ajax({
- method: 'GET',
- url: 'http://ajax.frontend.itheima.net:3006/api/robot',
- data: {
- spoken: text
- },
- success: function (res) {
- if (res.message === 'success') {
- var msg = res.data.info.text
- $('#talk_list').append('<li class="left_word"><img src="img/person01.png" /> <span>' + msg + '</span></li>')
- resetui()
- // TODO: 发起请求,将机器人的聊天消息转为语音格式
- }
- }
- })
- }
这里注意的是接口换成新的了
http://www.liulongbin.top:3006/api/robot
新
- function getMsg(text){
- $.ajax({
- method: "get",
- url: "http://www.liulongbin.top:3006/api/robot",
- data: {
- spoken:text
- },
- success: function (res) {
- console.log(res);
- if(res.message==='success'){
- var msg=res.data.info.text;
- // 接收回来的聊天消息
- $('#talk_list').append('<li class="left_word"><img src="img/person01.png" /> <span>'+msg+'</span></span></li>')
- resetui()
- }
- }
- });
- }
将机器人的聊天内容转为语音
- function getVoice(text) {
- $.ajax({
- method: 'GET',
- url: 'http://ajax.frontend.itheima.net:3006/api/synthesize',
- data: {
- text: text
- },
- success: function (res) {
- // 如果请求成功,则 res.voiceUrl 是服务器返回的音频 URL 地址
- if (res.status === 200) {
- $('#voice').attr('src', res.voiceUrl)
- }
- }
- })
- }
通过 <audio> 播放语音
- <!-- 音频播放语音内容 -->
- <audio src="" id="voice" autoplay style="display: none;"></audio>
这里注意的是也要用新接口
http://www.liulongbin.top:3006/api/synthesize
- function getVoice(text){
- $.ajax({
- type:"get",
- url:'http://www.liulongbin.top:3006/api/synthesize',
- data:{
- text:text
- },
- success:function(res){
- console.log(res);
- if(res.status===200){
- // 播放语音
- $("#voics").attr('src',res.voiceUrl)
- }
- // console.log(res);
- }
- })
- }
使用回车键发送消息
- $('#ipt').on('keyup',function(e){
- console.log(e.keyCode);
- if(e.keyCode==13){
- // 调用按钮的click函数,可以通过编程的方式触发按钮的点击事件
- $("#btnSend").click()
- }
- })
- })
这里又要注意keyCode的C是大写
完整代码
- $(function(){
- // 初始化右侧滚动条
- // 这个方法定义在scroll.js中
- resetui()
-
- // 为发送按钮绑定鼠标点击事件
- $("#btnSend").on('click',function(){
- var text=$("#ipt").val().trim()
- if(text.length<=0){
- return $("#ipt").val("")
- }
- // 如果用户输入的聊天内容,则将聊天内容追加到页面显示
- $('#talk_list').append('<li class="right_word"><img src="img/person02.png" /> <span>'+text+'</span></li>')
- $("#ipt").val("")
- // 重叠滚动条
- resetui()
- // 发起请求,获取聊天内容
- getMsg(text)
- })
- // 获取聊天机器人发送回来的信息
- function getMsg(text){
- $.ajax({
- type: "get",
- url: "http://www.liulongbin.top:3006/api/robot",
- data: {
- spoken:text
- },
- success: function (res) {
- // console.log(res);
- if(res.message==='success'){
- var msg=res.data.info.text;
- // 接收回来的聊天消息
- $('#talk_list').append('<li class="left_word"><img src="img/person01.png" /> <span>'+msg+'</span></span></li>')
- resetui()
- // 调用getVoice()函数,把语音转换为文本
- getVoice(msg)
- }
- }
- });
- }
- // 把文字转换为语音
- function getVoice(text){
- $.ajax({
- type:"get",
- url:'http://www.liulongbin.top:3006/api/synthesize',
- data:{
- text:text
- },
- success:function(res){
- console.log(res);
- if(res.status===200){
- // 播放语音
- $("#voics").attr('src',res.voiceUrl)
- }
- // console.log(res);
- }
- })
- }
- // 让文本输入框响应回车事件后,提交消息
- $('#ipt').on('keyup',function(e){
- console.log(e.keyCode);
- if(e.keyCode==13){
- // 调用按钮的click函数,可以通过编程的方式触发按钮的点击事件
- $("#btnSend").click()
- }
- })
- })
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta http-equiv="X-UA-Compatible" content="ie=edge" />
- <link rel="stylesheet" href="css/reset.css" />
- <link rel="stylesheet" href="css/main.css" />
- <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui.min.js"></script>
- <script type="text/javascript" src="js/jquery.mousewheel.js"></script>
- <title>聊天机器人</title>
- </head>
-
- <body>
- <div class="wrap">
- <!-- 头部 Header 区域 -->
- <div class="header">
- <h3>小思同学</h3>
- <img src="img/person01.png" alt="icon" />
- </div>
- <!-- 中间 聊天内容区域 -->
- <div class="main">
- <ul class="talk_list" style="top: 0px;" id="talk_list">
- <li class="left_word">
- <img src="img/person01.png" /> <span>嗨,你最新有想我吗</span>
- </li>
- </ul>
- <div class="drag_bar" style="display: none;">
- <div
- class="drager ui-draggable ui-draggable-handle"
- style="display: none; height: 412.628px;"
- ></div>
- </div>
- </div>
- <!-- 底部 消息编辑区域 -->
- <div class="footer">
- <img src="img/person02.png" alt="icon" />
- <input type="text" placeholder="说的什么吧..." class="input_txt" id="ipt" />
- <input type="button" value="发 送" class="input_sub" id="btnSend"/>
- </div>
- </div>
- <!-- 注意 只要为audio指定了新的src属性 而且绑定了 autoplay style="display: none;" 语音会自动播放 并且隐藏起来 -->
- <audio src="" id="voics" autoplay style="display: none;"></audio>
- <script type="text/javascript" src="js/scroll.js"></script>
- <script src="js/chart.js"></script>
- </body>
- </html>
效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。