<!DOCTYPE html>
<html>
  <head>
    <title>在线聊天页面</title>
    <meta charset="UTF-8">
    <style>
      body {
        background-color: #fff;
        font-family: Arial, sans-serif;
        font-size: 14px;
        color: #333;
      }
      #chat-history {
        height: 80%;
        background-color: #fff;
        overflow-y: scroll;
        padding: 10px;
      }
      #input-box {
        height: 20%;
        background-color: #ccc;
        padding: 10px;
      }
      #input-message {
        width: 100%;
        height: 100%;
        box-sizing: border-box;
        border: none;
        outline: none;
        background-color: #eee;
        border-radius: 5px;
        padding: 10px;
        font-size: 14px;
      }
      .message-box {
        margin-bottom: 10px;
        padding: 10px;
        border-radius: 5px;
      }
      .send-message-box {
        background-color: #ccc;
      }
      .receive-message-box {
        background-color: #cfc;
      }
      .markdown {
        font-size: 14px;
        line-height: 1.5em;
      }
      #color-picker {
        position: fixed;
        top: 20px;
        right: 20px;
      }
      .color {
        display: inline-block;
        width: 20px;
        height: 20px;
        margin-right: 5px;
        border-radius: 50%;
        cursor: pointer;
      }
      .white {
        background-color: #fff;
      }
      .black {
        background-color: #000;
      }
      .green {
        background-color: #0f0;
      }
      .red {
        background-color: #f00;
      }
      .pink {
        background-color: #f0f;
      }
      .purple {
        background-color: #800080;
      }
      .blue {
        background-color: #00f;
      }
      .darkgreen {
        background-color: #006400;
      }
      .orange {
        background-color: #ffa500;
      }
    </style>
  </head>
  <body>
    <div id="chat-history"></div>
    <div id="input-box">
      <textarea id="input-message" placeholder="请输入聊天内容,按Enter发送"></textarea>
    </div>
    <div id="color-picker">
      <div class="color white"></div>
      <div class="color black"></div>
      <div class="color green"></div>
      <div class="color red"></div>
      <div class="color pink"></div>
      <div class="color purple"></div>
      <div class="color blue"></div>
      <div class="color darkgreen"></div>
      <div class="color orange"></div>
    </div>
    <script>
      // 获取元素
      const chatHistory = document.querySelector('#chat-history');
      const inputMessage = document.querySelector('#input-message');
      const colorPicker = document.querySelector('#color-picker');
      const colors = colorPicker.querySelectorAll('.color');
<pre><code>  // 定义变量
  let currentColor = '#fff';

  // 监听事件
  inputMessage.addEventListener('keydown', function(event) {
    if (event.keyCode === 13 &amp;&amp; !event.shiftKey) {
      event.preventDefault();
      const messageText = inputMessage.value.trim();
      if (messageText) {
        const messageBox = createMessageBox(messageText, true);
        chatHistory.appendChild(messageBox);
        scrollToBottom();
        sendMessage(messageText);
        inputMessage.value = '';
      }
    }
  });

  colors.forEach(function(color) {
    color.addEventListener('click', function() {
      const colorClass = this.classList[1];
      currentColor = getColorFromClassName(colorClass);
      updateColor();
    });
  });

  // 函数定义
  function createMessageBox(messageText, isSend) {
    let messageBox = document.createElement('div');
    messageBox.classList.add('message-box');
    if (isSend) {
      messageBox.classList.add('send-message-box');
    } else {
      messageBox.classList.add('receive-message-box');
    }
    let messageContent = document.createElement('div');
    messageContent.innerHTML = marked(messageText);
    messageContent.classList.add('markdown');
    messageBox.appendChild(messageContent);
    return messageBox;
  }

  function scrollToBottom() {
    chatHistory.scrollTop = chatHistory.scrollHeight;
  }

  function sendMessage(messageText) {
    const xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://localhost:8089/chat');
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.onreadystatechange = function() {
      if (xhr.readyState === XMLHttpRequest.DONE &amp;&amp; xhr.status === 200) {
        const responseText = xhr.responseText;
        const messageBox = createMessageBox(responseText, false);
        chatHistory.appendChild(messageBox);
        scrollToBottom();
      }
    };
    const requestObject = {
      message: messageText,
      color: currentColor
    };
    xhr.send(JSON.stringify(requestObject));
  }

  function getColorFromClassName(className) {
    switch (className) {
      case 'white':
        return '#fff';
      case 'black':
        return '#000';
      case 'green':
        return '#0f0';
      case 'red':
        return '#f00';
      case 'pink':
        return '#f0f';
      case 'purple':
        return '#800080';
      case 'blue':
        return '#00f';
      case 'darkgreen':
        return '#006400';
      case 'orange':
        return '#ffa500';
      default:
        return '#fff';
    }
  }

  function updateColor() {
    chatHistory.style.backgroundColor = currentColor;
    inputMessage.style.backgroundColor = currentColor;
  }
&lt;/script&gt;
</code></pre>
  </body>
</html>
在线聊天页面:HTML 前端实现实时聊天功能

原文地址: https://www.cveoy.top/t/topic/lvW9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录