• 聊天室案例实现保姆级教学


    老样子先看效果图

    准备工作

    1.需要用到样式重置文件reset.css,emmm没有自己写也行将padding margin等去除;

    2.下载并引入axios;

    3.接口文档(不用担心跨域),或者使用自己的接口;

            接口:http://www.liulongbin.top:3006/api/robot

            请求:GET

            参数:spoken 表示我们输入的内容

            返回:
                    {
                      "data": {
                                "type": 5000,
                                "info": {
                                  "text": "我是瓦利~"
                                          }
                                  },
                      "message": "success"
                    }

    4.开始冻手。。。

    js部分

    1. // 首先创建一个自执行函数
    2. (function () {
    3. // 获取元素
    4. let header = document.querySelector('.header')
    5. let ipt = document.querySelector('.ipt')
    6. let send = document.querySelector('.send')
    7. // 注册事件
    8. send.addEventListener('click', sendHandler)
    9. // 回车发送
    10. ipt.addEventListener('keyup', function (e) {
    11. if (e.keyCode == '13') {
    12. sendHandler()
    13. }
    14. })
    15. // 信息数组
    16. let msgArr = [
    17. ]
    18. // 发送事件
    19. function sendHandler() {
    20. let value = ipt.value // 输入框的值
    21. if (value === '') return // 输入框为空不执行以下代码
    22. console.log(value.length);
    23. // 控制输入字数,可自定义
    24. if (value.length < 10) {
    25. // 将自己的信息存储到数组
    26. msgArr.push({
    27. type: 'person', // 信息类型(用于判断谁发出的信息)
    28. content: value
    29. })
    30. renderMsg(msgArr)// 渲染信息
    31. ipt.value = '' // 清空输入框
    32. header.innerText = '正在输入中....' // 更改对方输入状态
    33. // 发起请求
    34. axios.get('http://www.liulongbin.top:3006/api/robot',
    35. {
    36. params: {
    37. spoken: value
    38. }
    39. }
    40. ).then(res => {
    41. // console.log(res.data.data.info.text);
    42. // 将对方返回的信息添加进数组
    43. msgArr.push({
    44. type: 'robot', // 信息类型(用于判断谁发出的信息)
    45. content: res.data.data.info.text
    46. })
    47. header.innerText = '瓦利'
    48. renderMsg(msgArr) // 对方响应后再次调用此函数将信息渲染出来
    49. }).catch(err => {
    50. console.log(err);
    51. }).finally(() => {
    52. console.log('消息列表:', msgArr);
    53. })
    54. } else {
    55. alert('字数超过限制')
    56. }
    57. }
    58. // 渲染信息
    59. function renderMsg(arr) {
    60. let html = arr.map((msg) => {
    61. // 判断信息的类型
    62. if (msg.type === 'person') {
    63. return `
    64. ${msg.content}
    65. `
  • } else {
  • return `
  • ${msg.content}
  • `
  • }
  • }).join('')
  • document.querySelector('.msg-box').innerHTML = html
  • }
  • }())
  • html部分

    1. <header class="header">瓦利header>
    2. <main class="msg-box">
    3. main>
    4. <footer class="footer">
    5. <input class="ipt" type="text">
    6. <span class="send">发送span>
    7. footer>
    8. <script src="./js/axios.js">script>
    9. <script src="./js/index.js">script>

    css部分

    1. :root {
    2. font-size: 10px;
    3. }
    4. body {
    5. background-color: #2b2b2b;
    6. }
    7. .header {
    8. color: white;
    9. line-height: 4.4rem;
    10. text-align: center;
    11. font-size: 1.6rem;
    12. height: 4.4rem;
    13. background-color: #151717;
    14. width: 100%;
    15. border-bottom: 1px solid rgb(46, 46, 46);
    16. position: fixed;
    17. top: 0;
    18. left: 0;
    19. right: 0;
    20. }
    21. .msg-box {
    22. display: flex;
    23. flex-direction: column;
    24. padding: 54px 10px 59px;
    25. }
    26. .msg-box .msg {
    27. display: flex;
    28. margin-bottom: 10px;
    29. }
    30. .msg-box .msg img {
    31. border-radius: 3px;
    32. }
    33. .msg-box .msg .content {
    34. min-height: 40px;
    35. max-width: calc(100vw - 120px);
    36. color: #fff;
    37. display: flex;
    38. align-items: center;
    39. padding: 10px;
    40. font-size: 14px;
    41. border-radius: 3px;
    42. line-height: 18px;
    43. }
    44. .msg-box .robot .content {
    45. background: #282828;
    46. margin-left: 10px;
    47. }
    48. .msg-box .person .content {
    49. background: #22b661;
    50. margin-right: 10px;
    51. }
    52. .msg-box .person {
    53. align-self: flex-end;
    54. }
    55. .footer {
    56. height: 4.9rem;
    57. position: fixed;
    58. left: 0;
    59. bottom: 0;
    60. right: 0;
    61. background-color: #151717;
    62. border-top: 1px solid rgb(46, 46, 46);
    63. display: flex;
    64. align-items: center;
    65. flex-shrink: 0;
    66. justify-content: space-evenly;
    67. }
    68. .ipt {
    69. border: none;
    70. background-color: rgb(58, 58, 58);
    71. height: 3rem;
    72. width: 80%;
    73. border-radius: .5rem;
    74. padding-left: 1rem;
    75. }
    76. .send {
    77. width: 16%;
    78. border-radius: .5rem;
    79. height: 3rem;
    80. line-height: 3rem;
    81. text-align: center;
    82. color: white;
    83. background-color: #24b15d;
    84. }

  • 相关阅读:
    ToBeWritten之评估数据质量
    零数科技携手云南能投智慧打造全国最大区块链实体项目
    nodejs+vue杰和牧场管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
    uni-app小程序开发使用uView,u-model传入富文本内容过长,真机上无法滚动
    Map和Set常见操作汇总
    Python学习 day03(注意事项)
    [附源码]计算机毕业设计springboot考试系统
    MySQL基本语句
    element-ui文件下载(单个)
    请问大家在什么网站上能查到英文文献?
  • 原文地址:https://blog.csdn.net/qq_45547094/article/details/126886886