模板特点

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

第一步:HTML 结构 (index.html)

这是聊天室的骨架,定义了输入框、按钮和消息显示区域。

javascript网页聊天室模板
(图片来源网络,侵删)
<!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 秒检查一次
});

如何运行

  1. 创建文件: 在你的电脑上创建一个文件夹,chat-room,在该文件夹中创建三个文件:index.htmlstyle.cssscript.js,并将上面的代码分别复制粘贴进去。

  2. 保存文件: 确保所有文件都保存了。

    javascript网页聊天室模板
    (图片来源网络,侵删)
  3. 打开网页: 直接用浏览器(如 Chrome, Firefox, Edge)打开 index.html 文件。

你将看到一个功能完整的聊天室界面,在输入框中输入消息并点击“发送”或按回车键,你发送的消息会显示在右侧,页面会自动模拟其他用户发送消息和用户加入/离开的提示。

未来可以扩展的方向

这个模板是一个很好的起点,你可以基于它添加更多高级功能:

  • 用户列表: 在侧边栏显示当前在线的用户。
  • 私聊功能: 点击用户名可以发送私聊消息,只有特定两个人能看到。
  • 用户身份: 区分普通用户、管理员、机器人等,给予不同权限和颜色。
  • 文件/图片分享: 允许用户发送图片和文件。
  • 表情包支持: 添加一个表情选择器。
  • 真实后端: 使用 WebSocket 连接到 Node.js、Python (Django/Flask) 或 Java (Spring Boot) 的后端,实现实时双向通信。
  • 持久化存储: 将聊天记录保存到数据库(如 MongoDB, MySQL)中。
javascript网页聊天室模板
(图片来源网络,侵删)