模板特点
- 纯前端实现: 使用原生 JavaScript,不依赖任何框架(如 React, Vue),便于学习和理解核心逻辑。
- 模块化代码: 代码结构清晰,分为 HTML、CSS 和 JS 三部分,易于维护和扩展。
- 功能完整: 包含了发送消息、显示消息、模拟用户加入/离开、时间戳等基本聊天室功能。
- 易于扩展: 可以轻松地在此基础上添加更多功能,例如用户列表、私聊、表情包等。
- 后端模拟: 使用
setInterval模拟其他用户和服务器推送的消息,无需搭建真实后端即可看到效果。
第一步:HTML 结构 (index.html)
这是聊天室的骨架,定义了输入框、按钮和消息显示区域。

(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">JavaScript 聊天室</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="chat-container">
<header class="chat-header">
<h1><i class="fas fa-comments"></i> 简易聊天室</h1>
<p>欢迎来到我们的聊天室</p>
</header>
<main class="chat-main">
<div class="chat-messages">
<!-- 消息将在这里动态显示 -->
</div>
</main>
<div class="chat-form-container">
<form id="chat-form" class="chat-form">
<input id="msg" type="text" placeholder="输入消息..." required autocomplete="off" />
<button class="btn"><i class="fas fa-paper-plane"></i> 发送</button>
</form>
</div>
</div>
<!-- 引入 Font Awesome 图标库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/js/all.min.js"></script>
<!-- 引入我们的 JavaScript 文件 -->
<script src="script.js"></script>
</body>
</html>
第二步:CSS 样式 (style.css)
这是聊天室的外观,让它看起来像一个现代化的聊天应用。
/* 基础样式 */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
/* 聊天容器 */
.chat-container {
width: 90%;
max-width: 600px;
background: #fff;
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
overflow: hidden;
display: flex;
flex-direction: column;
height: 90vh;
}
/* 聊天头部 */
.chat-header {
background: #4a90e2;
color: #fff;
padding: 1rem;
text-align: center;
}
.chat-header h1 {
margin-bottom: 0.5rem;
font-size: 1.5rem;
}
/* 聊天主体 - 消息显示区 */
.chat-main {
flex-grow: 1;
overflow-y: auto;
padding: 1rem;
background-color: #f9f9f9;
}
.chat-messages {
display: flex;
flex-direction: column;
gap: 0.8rem;
}
/* 单条消息样式 */
.message {
background: #e9ecef;
padding: 0.8rem 1rem;
border-radius: 10px;
max-width: 80%;
word-wrap: break-word;
animation: fadeIn 0.3s ease-in;
}
.message .meta {
font-size: 0.8rem;
color: #6c757d;
display: block;
margin-bottom: 0.3rem;
}
.message .meta span {
font-weight: bold;
}
/* 自己发送的消息(靠右显示) */
.message.self {
background: #4a90e2;
color: #fff;
align-self: flex-end;
border-bottom-right-radius: 5px;
}
.message.self .meta {
color: #d1e7ff;
text-align: right;
}
/* 系统消息(居中显示) */
.message.system {
background: #ffc107;
color: #212529;
align-self: center;
text-align: center;
font-style: italic;
max-width: 70%;
}
/* 聊天输入框区域 */
.chat-form-container {
padding: 1rem;
background: #fff;
border-top: 1px solid #e9ecef;
}
.chat-form {
display: flex;
}
#msg {
flex-grow: 1;
padding: 0.8rem;
border: 1px solid #ddd;
border-radius: 5px;
font-size: 1rem;
}
.btn {
background: #4a90e2;
color: #fff;
border: none;
padding: 0.8rem 1.2rem;
margin-left: 0.5rem;
border-radius: 5px;
cursor: pointer;
font-size: 1rem;
transition: background 0.3s ease;
}
.btn:hover {
background: #357abd;
}
/* 动画效果 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
第三步:JavaScript 逻辑 (script.js)
这是聊天室的大脑,处理所有交互逻辑,包括发送消息、接收消息和模拟其他用户。
// 等待 DOM 完全加载
document.addEventListener('DOMContentLoaded', () => {
// 获取需要的 DOM 元素
const chatForm = document.getElementById('chat-form');
const chatMessages = document.querySelector('.chat-messages');
const msgInput = document.getElementById('msg');
// 模拟当前用户
const currentUser = '我'; // 可以修改成动态获取
// --- 1. 发送消息功能 ---
chatForm.addEventListener('submit', (e) => {
// 阻止表单默认提交行为(页面刷新)
e.preventDefault();
// 获取输入框中的消息
const message = msgInput.value.trim();
// 如果消息不为空,则发送
if (message) {
// 调用发送消息的函数
outputMessage(message, currentUser, true);
// 清空输入框并聚焦
msgInput.value = '';
msgInput.focus();
}
});
// --- 2. 将消息添加到聊天窗口 ---
function outputMessage(message, user, isSelf = false) {
// 创建消息 div 元素
const div = document.createElement('div');
// 根据是否是当前用户添加不同的 CSS 类
if (isSelf) {
div.classList.add('message', 'self');
} else {
div.classList.add('message');
}
// 设置消息内容
div.innerHTML = `
<p class="meta">${user} <span>${new Date().toLocaleTimeString()}</span></p>
<p class="text">${message}</p>
`;
// 将新消息添加到聊天窗口的末尾
chatMessages.appendChild(div);
// 自动滚动到底部
chatMessages.scrollTop = chatMessages.scrollHeight;
}
// --- 3. 模拟系统消息和其他用户消息 ---
function outputSystemMessage(message) {
const div = document.createElement('div');
div.classList.add('message', 'system');
div.innerHTML = `<p>${message}</p>`;
chatMessages.appendChild(div);
chatMessages.scrollTop = chatMessages.scrollHeight;
}
function outputOtherUserMessage() {
const users = ['小明', '小红', 'Alice', 'Bob'];
const messages = [
'大家好!',
'今天天气真不错!',
'有人吗?',
'在的,在的!',
'哈哈哈',
'这个功能很棒!',
'晚安!'
];
const randomUser = users[Math.floor(Math.random() * users.length)];
const randomMessage = messages[Math.floor(Math.random() * messages.length)];
outputMessage(randomMessage, randomUser, false);
}
// 模拟用户加入
outputSystemMessage(`${currentUser} 加入了聊天室,`);
// 模拟其他用户随机发送消息
setInterval(() => {
if (Math.random() > 0.5) { // 50% 的概率发送消息
outputOtherUserMessage();
}
}, 5000); // 每 5 秒检查一次
// 模拟新用户加入
setInterval(() => {
if (Math.random() > 0.7) { // 30% 的概率有新用户加入
const newUserNames = ['Charlie', 'David', 'Eve', 'Frank'];
const newUser = newUserNames[Math.floor(Math.random() * newUserNames.length)];
outputSystemMessage(`${newUser} 加入了聊天室,`);
}
}, 15000); // 每 15 秒检查一次
});
如何运行
-
创建文件: 在你的电脑上创建一个文件夹,
chat-room,在该文件夹中创建三个文件:index.html、style.css和script.js,并将上面的代码分别复制粘贴进去。 -
保存文件: 确保所有文件都保存了。
(图片来源网络,侵删) -
打开网页: 直接用浏览器(如 Chrome, Firefox, Edge)打开
index.html文件。
你将看到一个功能完整的聊天室界面,在输入框中输入消息并点击“发送”或按回车键,你发送的消息会显示在右侧,页面会自动模拟其他用户发送消息和用户加入/离开的提示。
未来可以扩展的方向
这个模板是一个很好的起点,你可以基于它添加更多高级功能:
- 用户列表: 在侧边栏显示当前在线的用户。
- 私聊功能: 点击用户名可以发送私聊消息,只有特定两个人能看到。
- 用户身份: 区分普通用户、管理员、机器人等,给予不同权限和颜色。
- 文件/图片分享: 允许用户发送图片和文件。
- 表情包支持: 添加一个表情选择器。
- 真实后端: 使用
WebSocket连接到 Node.js、Python (Django/Flask) 或 Java (Spring Boot) 的后端,实现实时双向通信。 - 持久化存储: 将聊天记录保存到数据库(如 MongoDB, MySQL)中。

(图片来源网络,侵删)
