当前位置:   article > 正文

利用jQuery中的Ajax完成聊天机器人案例_jquery ai机器人

jquery ai机器人

实现步骤:

1.梳理案例的代码结构

  • a.梳理页面的UI布局
  • b.将业务代码抽离到chat.js中
  • c.了解resetui()函数的作用:重置滚动条的位置
  1. <link rel="stylesheet" href="css/reset.css" />
  2. <link rel="stylesheet" href="css/index.css" />
  3. <script src="js/jquery-1.12.4.min.js"></script>
  4. <script src="js/jquery-ui.min.js"></script>
  5. <script src="js/jquery.mousewheel.js"></script>
  1. <div class="wrap">
  2. <!--头部区域-->
  3. <div class="header">
  4. <h3>小向同学</h3>
  5. <img src="images/person01.png" alt="icon" />
  6. </div>
  7. <!-- 聊天内容区域 -->
  8. <div class="main">
  9. <ul class="talk_list" style="top: 0px" id="talk_list">
  10. <li class="left_word">
  11. <img src="images/person01.png" /> <span>嗨,最近想我没有?</span>
  12. </li>
  13. <!-- <li class="right_word">
  14. <img src="images/person02.png" /> <span>你好哦</span>
  15. </li> -->
  16. </ul>
  17. <div class="drag_bar" style="display: none;">
  18. <div
  19. class="drager ui-draggable ui-draggable-handle"
  20. style="display: none; height: 412.628px;"
  21. ></div>
  22. </div>
  23. </div>
  24. <!-- 播放语音 -->
  25. <audio src="" id="voice" autoplay style="display: none;"></audio>
  26. <!-- 消息编辑区域 -->
  27. <div class="footer">
  28. <img src="images/person02.png" alt="">
  29. <input type="text" placeholder="说点什么吧..." class="input_txt" id="ipt" />
  30. <input type="button" value="发 送" class="input_sub" id="btnSend">
  31. </div>
  32. </div>
  33. <!-- 实现页面滚动 -->
  34. <script src="js/scroll.js"></script>
  35. <script src="js/chat.js"></script>

index.css,

  1. body {
  2. font-family: 'Microsoft YaHei';
  3. }
  4. .wrap {
  5. position: fixed;
  6. width: 450px;
  7. left: 50%;
  8. margin-left: -225px;
  9. top: 20px;
  10. bottom: 20px;
  11. border: 1px solid #ebebeb;
  12. background-color: #fff;
  13. border-radius: 10px;
  14. box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
  15. overflow: hidden;
  16. }
  17. .header {
  18. height: 55px;
  19. background: linear-gradient(90deg, rgba(246, 60, 47, 0.6), rgba(128, 58, 242, 0.6));
  20. overflow: hidden;
  21. }
  22. .header h3 {
  23. color: #faf3fc;
  24. line-height: 55px;
  25. font-weight: normal;
  26. float: left;
  27. letter-spacing: 2px;
  28. margin-left: 25px;
  29. font-size: 18px;
  30. text-shadow: 0px 0px 5px #944846;
  31. }
  32. .header img {
  33. float: right;
  34. margin: 7px 25px 0 0;
  35. border-radius: 20px;
  36. box-shadow: 0 0 5px #f7f2fe;
  37. }
  38. .main {
  39. position: absolute;
  40. left: 0;
  41. right: 0;
  42. top: 55px;
  43. bottom: 55px;
  44. background-color: #f4f3f3;
  45. box-sizing: border-box;
  46. padding: 10px 0;
  47. overflow: hidden;
  48. }
  49. .talk_list {
  50. position: absolute;
  51. width: 100%;
  52. left: 0px;
  53. top: 0px;
  54. }
  55. .talk_list li {
  56. overflow: hidden;
  57. margin: 20px 0px 30px;
  58. }
  59. .talk_list .left_word img {
  60. float: left;
  61. margin-left: 20px;
  62. }
  63. .talk_list .left_word span {
  64. float: left;
  65. background-color: #fe9697;
  66. padding: 10px 15px;
  67. max-width: 290px;
  68. border-radius: 12px;
  69. font-size: 16px;
  70. color: #fff;
  71. margin-left: 13px;
  72. position: relative;
  73. line-height: 24px;
  74. }
  75. .talk_list .left_word span:before {
  76. content: '';
  77. position: absolute;
  78. left: -8px;
  79. top: 3px;
  80. width: 13px;
  81. height: 12px;
  82. background: url('../images/corner01.png') no-repeat;
  83. }
  84. .talk_list .right_word img {
  85. float: right;
  86. margin-right: 20px;
  87. }
  88. .talk_list .right_word span {
  89. float: right;
  90. background-color: #fff;
  91. padding: 10px 15px;
  92. max-width: 290px;
  93. border-radius: 12px;
  94. font-size: 16px;
  95. color: #000;
  96. margin-right: 13px;
  97. position: relative;
  98. line-height: 24px;
  99. }
  100. .talk_list .right_word span:before {
  101. content: '';
  102. position: absolute;
  103. right: -8px;
  104. top: 3px;
  105. width: 13px;
  106. height: 12px;
  107. background: url('../images/corner02.png') no-repeat;
  108. }
  109. .drag_bar {
  110. position: absolute;
  111. right: 0px;
  112. top: 0px;
  113. background-color: #fff;
  114. height: 100%;
  115. width: 6px;
  116. box-sizing: border-box;
  117. border-bottom: 1px solid #f4f3f3;
  118. }
  119. .drager {
  120. position: absolute;
  121. left: 0px;
  122. top: 0px;
  123. background-color: #cdcdcd;
  124. height: 100px;
  125. width: 6px;
  126. border-radius: 3px;
  127. cursor: pointer;
  128. }
  129. .footer {
  130. width: 100%;
  131. height: 55px;
  132. left: 0px;
  133. bottom: 0px;
  134. background-color: #fff;
  135. position: absolute;
  136. }
  137. .footer img {
  138. float: left;
  139. margin: 8px 0 0 20px;
  140. }
  141. .input_txt {
  142. float: left;
  143. width: 270px;
  144. height: 37px;
  145. border: 0px;
  146. background-color: #f4f3f3;
  147. margin: 9px 0 0 20px;
  148. border-radius: 8px;
  149. padding: 0px;
  150. outline: none;
  151. text-indent: 15px;
  152. }
  153. .input_sub {
  154. float: left;
  155. width: 70px;
  156. height: 37px;
  157. border: 0px;
  158. background-color: #fe9697;
  159. margin: 9px 0 0 15px;
  160. border-radius: 8px;
  161. padding: 0px;
  162. outline: none;
  163. color: #fff;
  164. cursor: pointer;
  165. }

效果如下:

2.将用户输入的内容渲染到聊天窗口

chat.js,

  1. //重置滚动条位置
  2. resetui();
  3. //为发送按钮绑定鼠标点击事件
  4. $("#btnSend").on('click', function () {
  5. let text = $("#ipt").val().trim(); //要发送的内容
  6. // 判断发送的内容是是否为空
  7. if (text.length <= 0) {
  8. return $("#ipt").val('');
  9. }
  10. //如果用户输入了聊天内容,则将聊天内容追加到页面上显示
  11. $("#talk_list").append(`<li class="right_word"><img src="images/person02.png" /> <span>${text}</span></li>`);
  12. //发送完后清空输入框
  13. $("#ipt").val('');
  14. //重置滚动条位置
  15. resetui();
  16. });

3.发起请求获取聊天消息

chat.js,  

  1. //定义函数向服务器请求数据--获取聊天机器人发送回来的数据
  2. function getMsg(text){
  3. $.ajax({
  4. method: 'GET',
  5. url: 'http://www.liulongbin.top:3006/api/robot',
  6. data: {// 将用户放送的消息提交到服务器
  7. spoken: text
  8. },
  9. success: function(res){
  10. // console.log(res);
  11. //判断是否请求成功 data.info.text
  12. if(res.message === "success"){
  13. //接收服务器返回的聊天消息
  14. let msg = res.data.info.text;
  15. // console.log(msg);
  16. //将服务器返回的聊天消息渲染到聊天界面
  17. $("#talk_list").append(`<li class="left_word"><img src="images/person01.png" /> <span>${msg}</span></li>`);
  18. //重置滚动条位置
  19. resetui();
  20. }
  21. }
  22. })
  23. }

4.将机器人的聊天内容转为语音

5.通过<audio>播放语音

  1. //将机器人的聊天内容转换为语音
  2. function getVoice(text){
  3. $.ajax({
  4. method: 'GET',
  5. url: 'http://www.liulongbin.top:3006/api/synthesize',
  6. data: {
  7. text: text
  8. },
  9. success: function(res){
  10. // console.log(res);
  11. //判断是否请求成功
  12. if(res.status === 200){
  13. //播放语音
  14. $("#voice").attr("src",res.voiceUrl);
  15. }
  16. }
  17. })
  18. }

6.使用回车键发送消息

  1. //给文本输入框绑定事件--当按下并抬起回车键时自动发送聊天内容
  2. $("#ipt").on('keyup',function(e){
  3. // console.log(e.keyCode); // 13
  4. //判断用户是否按下的是回车键
  5. if(e.keyCode === 13){
  6. //调用按钮元素的 click 函数,将其内容发送出去
  7. $("#btnSend").click();
  8. }
  9. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/100700
推荐阅读
相关标签
  

闽ICP备14008679号