当前位置:首页 > 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
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Jav…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…