当前位置:首页 > JavaScript

js实现聊天窗口

2026-01-30 16:04:48JavaScript

实现聊天窗口的基本结构

使用HTML和CSS构建聊天窗口的界面框架。HTML部分需要包含消息显示区域和输入框,CSS用于美化界面。

<div class="chat-container">
  <div class="chat-messages" id="messages"></div>
  <div class="chat-input">
    <input type="text" id="messageInput" placeholder="Type a message...">
    <button id="sendButton">Send</button>
  </div>
</div>
.chat-container {
  width: 300px;
  height: 400px;
  border: 1px solid #ccc;
  display: flex;
  flex-direction: column;
}

.chat-messages {
  flex: 1;
  overflow-y: auto;
  padding: 10px;
}

.chat-input {
  display: flex;
  padding: 10px;
}

#messageInput {
  flex: 1;
  margin-right: 10px;
}

处理消息发送功能

通过JavaScript实现消息发送和显示功能。监听发送按钮点击事件和输入框回车事件。

const messagesContainer = document.getElementById('messages');
const messageInput = document.getElementById('messageInput');
const sendButton = document.getElementById('sendButton');

function sendMessage() {
  const messageText = messageInput.value.trim();
  if (messageText) {
    addMessage(messageText, 'user');
    messageInput.value = '';
    // 这里可以添加发送到服务器的逻辑
  }
}

function addMessage(text, sender) {
  const messageElement = document.createElement('div');
  messageElement.classList.add('message', sender);
  messageElement.textContent = text;
  messagesContainer.appendChild(messageElement);
  messagesContainer.scrollTop = messagesContainer.scrollHeight;
}

sendButton.addEventListener('click', sendMessage);
messageInput.addEventListener('keypress', (e) => {
  if (e.key === 'Enter') sendMessage();
});

添加样式区分消息

通过CSS为不同发送者的消息添加不同样式,增强视觉区分。

.message {
  margin: 5px 0;
  padding: 8px 12px;
  border-radius: 18px;
  max-width: 70%;
}

.user {
  background-color: #007bff;
  color: white;
  align-self: flex-end;
}

.bot {
  background-color: #f1f1f1;
  align-self: flex-start;
}

实现简单的自动回复

模拟聊天机器人功能,在用户发送消息后自动回复。

function sendMessage() {
  const messageText = messageInput.value.trim();
  if (messageText) {
    addMessage(messageText, 'user');
    messageInput.value = '';

    // 模拟自动回复
    setTimeout(() => {
      addMessage('This is an automated reply', 'bot');
    }, 500);
  }
}

添加时间戳显示

增强聊天窗口的功能,为每条消息添加发送时间。

function addMessage(text, sender) {
  const messageElement = document.createElement('div');
  messageElement.classList.add('message-container', sender);

  const timeElement = document.createElement('div');
  timeElement.classList.add('time');
  timeElement.textContent = new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

  const textElement = document.createElement('div');
  textElement.classList.add('message');
  textElement.textContent = text;

  messageElement.appendChild(textElement);
  messageElement.appendChild(timeElement);

  messagesContainer.appendChild(messageElement);
  messagesContainer.scrollTop = messagesContainer.scrollHeight;
}
.message-container {
  display: flex;
  flex-direction: column;
  margin: 5px 0;
  max-width: 70%;
}

.message-container.user {
  align-self: flex-end;
  align-items: flex-end;
}

.message-container.bot {
  align-self: flex-start;
  align-items: flex-start;
}

.time {
  font-size: 0.7em;
  color: #666;
  margin-top: 2px;
}

持久化聊天记录

使用localStorage保存聊天记录,实现页面刷新后不丢失消息。

js实现聊天窗口

// 加载保存的消息
function loadMessages() {
  const savedMessages = localStorage.getItem('chatMessages');
  if (savedMessages) {
    messagesContainer.innerHTML = savedMessages;
    messagesContainer.scrollTop = messagesContainer.scrollHeight;
  }
}

// 保存消息到localStorage
function saveMessages() {
  localStorage.setItem('chatMessages', messagesContainer.innerHTML);
}

// 修改sendMessage函数
function sendMessage() {
  const messageText = messageInput.value.trim();
  if (messageText) {
    addMessage(messageText, 'user');
    messageInput.value = '';
    saveMessages();

    setTimeout(() => {
      addMessage('This is an automated reply', 'bot');
      saveMessages();
    }, 500);
  }
}

// 页面加载时加载消息
window.addEventListener('load', loadMessages);

标签: 窗口js
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…