当前位置:首页 > 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实现消息发送和显示功能。监听发送按钮点击事件和输入框回车事件。

js实现聊天窗口

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;
}

实现简单的自动回复

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

js实现聊天窗口

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保存聊天记录,实现页面刷新后不丢失消息。

// 加载保存的消息
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 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…