用JavaScript和HTML实现聊天页面和功能(超详细)

news2024/11/15 13:28:36

文章目录

  • 🚀一、介绍
  • 🚀二、开始编码
    • 🔎2.1 创建一个HTML文件
    • 🔎2.2 编写样式
    • 🔎2.3 完善聊天页面
    • 🔎2.4 编写按钮逻辑
    • 🔎2.5 测试聊天效果
    • 🔎2.6 优化对话显示
    • 🔎2.7 设置一个自动回复
    • 🔎2.8 优化头像为圆形显示
  • 🚀三、总结


🚀一、介绍

在这个博文中,我将向您展示如何使用JavaScript和HTML来创建一个精美的聊天页面。这个页面将允许两个人进行对话,并显示他们之间的消息。页面上将有一个对话展示框、一个输入框和一个提交按钮,以及用户聊天的头像。

先来一个最终效果图展示:

在这里插入图片描述

🚀二、开始编码

在开始编写代码之前,我们需要确保我们有一个基本的HTML结构。请按照以下步骤创建一个HTML文件并将其命名为chat.html

🔎2.1 创建一个HTML文件

创建一个HTML文件,并在文件的头部添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chat</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="chat-container">
        <div class="chat-display">
            <!-- 对话展示框将在这里 -->
        </div>
        <div class="chat-input">
            <input type="text" id="message-input" placeholder="请输入内容">
            <button id="submit-btn">发送</button>
        </div>
    </div>

    <script src="script.js"></script>
</body>
</html>

在上面的代码中,我们定义了一个聊天容器(chat-container),其中包含一个对话展示框(chat-display),一个输入框(message-input)和一个提交按钮(submit-btn)。

在这里插入图片描述

🔎2.2 编写样式

创建一个CSS文件并将其命名为style.css,然后将以下代码添加到文件中:

/* 设置基本样式 */
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}

.chat-container {
    max-width: 500px;
    margin: 20px auto;
    border: 1px solid #ccc;
    border-radius: 10px;
    overflow: hidden;
}

.chat-display {
    padding: 10px;
    background-color: #f9f9f9;
    height: 300px;
    overflow-y: scroll;
}

.chat-input {
    display: flex;
    align-items: center;
    padding: 10px;
    background-color: #f5f5f5;
}

.chat-input input {
    flex-grow: 1;
    margin-right: 10px;
    padding: 5px;
    border: 1px solid #ccc;
    border-radius: 5px;
}

.chat-input button {
    padding: 5px 10px;
    background-color: #428bca;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

在上面的代码中,我们定义了一些基本的样式来设置聊天页面的外观。这些样式将在后面的步骤中进一步完善。
在这里插入图片描述

🔎2.3 完善聊天页面

虽然我们已经成功地实现了一个基本的聊天页面,但是为了使页面看起来更精美,我们还可以添加一些额外的功能和样式。

  1. 添加头像:为了给用户一个更加个性化的聊天体验,我们可以为每个用户添加一个头像。在sendMessage函数中,我们可以使用HTML的<img>元素来添加头像。在代码中添加以下代码:
// 获取用户头像的URL
const avatarUrl = 'https://example.com/user-avatar.png';

// 创建并设置头像元素
const avatar = document.createElement('img');
avatar.src = avatarUrl;
avatar.width = 40;
avatar.height = 40;

// 将头像元素添加到消息元素的前面
newMessage.insertBefore(avatar, newMessage.firstChild);

在上面的代码中,我们首先定义了一个用户头像的URL(avatarUrl)。然后,我们创建了一个图片元素(avatar),并将其设置为指定的URL、宽度和高度。最后,我们使用insertBefore方法将头像元素添加到消息元素的前面。

  1. 设置对话用户的样式:为了区分聊天页面中不同用户的消息,我们可以为每个用户分配不同的颜色或背景色。在sendMessage函数中,我们可以根据消息的发送者来设置不同样式。在代码中添加以下代码:
// 获取当前用户的用户名
const username = 'User';

// 设置消息的样式
if (username === 'User') {
    // 用户的消息样式
    newMessage.style.backgroundColor = '#428bca';
    newMessage.style.color = 'white';
} else {
    // 对方的消息样式
    newMessage.style.backgroundColor = '#f5f5f5';
    newMessage.style.color = '#333';
}

在上面的代码中,我们首先定义了当前用户的用户名(username)。然后,我们根据用户名来设置不同的消息样式。如果用户名为User,则为用户的消息设置一个蓝色背景色和白色字体颜色;否则,为对方的消息设置一个灰色背景色和黑色字体颜色。

🔎2.4 编写按钮逻辑

创建一个JavaScript文件并将其命名为script.js,然后将以下代码添加到文件中:

// 获取元素
const messageInput = document.getElementById('message-input');
const submitBtn = document.getElementById('submit-btn');
const chatDisplay = document.querySelector('.chat-display');

// 添加事件监听器
submitBtn.addEventListener('click', sendMessage);

// 定义函数:发送消息
function sendMessage() {
    // 获取输入的消息内容
    const message = messageInput.value;
    
    // 创建一个新的消息元素
    const newMessage = document.createElement('div');
    newMessage.classList.add('message');
    
    // 设置消息内容和样式
    newMessage.innerHTML = message;
    newMessage.style.backgroundColor = '#428bca';
    newMessage.style.color = 'white';
    newMessage.style.padding = '5px 10px';
    newMessage.style.marginBottom = '10px';
    
    // 将消息添加到对话展示框中
    chatDisplay.appendChild(newMessage);
    
    // 清空输入框
    messageInput.value = '';
}

在上面的代码中,我们首先获取了输入框(messageInput)、提交按钮(submitBtn)和对话展示框(chatDisplay)的引用。然后,我们为提交按钮添加了一个点击事件监听器(sendMessage)。

sendMessage函数中,我们首先获取用户输入的消息内容,并创建一个新的消息元素(newMessage)。然后,我们为消息元素设置样式,并将其添加到对话展示框中。最后,我们清空输入框的内容。

🔎2.5 测试聊天效果

现在,您可以在浏览器中打开chat.html文件来测试聊天页面。在输入框中输入一条消息,然后点击提交按钮。您的消息应该会显示在对话展示框中。
在这里插入图片描述

🔎2.6 优化对话显示

像模仿微信的做法,自己发送的消息放到框的右边,并且文本居中。在代码中作出如下设置。

newMessage.style['text-align'] = 'right';
newMessage.style['display'] = 'inline-flex';
newMessage.style['justify-content'] = 'right'
newMessage.style['align-items'] = 'center'
newMessage.style['width'] = '100%'

效果变成如下。
在这里插入图片描述

🔎2.7 设置一个自动回复

一个单独的聊天未免有点单调,增加一条自动回复吧。当接收到消息的时候,自动回复一条数据,实现后的效果如下图。

🔎2.8 优化头像为圆形显示

方形的头像看上去不太和谐和美观,优化成圆形显示,在style.css中添加如下代码。

.message img {
    border-radius: 30px;
}

在这里插入图片描述

🚀三、总结

通过使用JavaScript和HTML,我们成功地创建了一个精美的聊天页面。在这个页面上,两个人可以进行对话,并显示他们之间的消息。页面上有一个对话展示框、一个输入框和一个提交按钮,以及用户聊天的头像。

您可以根据自己的需求来进一步完善页面的功能和样式。例如,您可以添加时间戳、滚动到最新消息、保存聊天记录等功能。您还可以自定义样式,使页面更加漂亮和吸引人。

希望这篇博文能够帮助您理解如何用JavaScript和HTML创建一个聊天页面,并为您的项目或应用提供一些灵感。祝您编程愉快!

完整代码可以通过博客顶部下载或者私信我获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium地形裁剪

基于纹理映射实现的裁剪&#xff0c;反裁剪也可以。比判断点是否在多边形内裁剪性能要好的多&#xff0c;缺点是在边缘锯齿感会比较明显。 3DTileset 的裁剪也和这样一样用纹理映射实现了&#xff0c;效果一样

单链表的多语言表达:C++、Java、Python、Go、Rust

单链表 是一种链式数据结构&#xff0c;由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据&#xff0c;只用于表示链表的开始位置。 单链表的主要操作包括&#xff1a; 添加元素&#xff1a;在链表的头部添加新…

【指针二:穿越编程边界的超能力】

本章重点 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 五、函数指针 首先看一段代码&#xff1a; 输出的是两个地址相同&#xff0c;这两个相同的地址都是 test 函数的地址。 那我们的函数的地址要想保存起来&#xff0c;怎…

LeetCode63. 不同路径 II

63. 不同路径 II 文章目录 [63. 不同路径 II](https://leetcode.cn/problems/unique-paths-ii/)一、题目二、题解方法一&#xff1a;二维数组动态规划方法二&#xff1a;一维数组动态规划 一、题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “…

【Linux】线程互斥 -- 互斥锁 | 死锁 | 线程安全

引入互斥初识锁互斥量mutex锁原理解析 可重入VS线程安全STL中的容器是否是线程安全的? 死锁 引入 我们写一个多线程同时访问一个全局变量的情况(抢票系统)&#xff0c;看看会出什么bug&#xff1a; // 共享资源&#xff0c; 火车票 int tickets 10000; //新线程执行方法 vo…

rtthread的idle线程不应该长时间堵塞

RT-Thread是一个实时嵌入式操作系统&#xff0c;它的空闲线程&#xff08;Idle Thread&#xff09;是在系统中没有其他任务需要执行时运行的线程。空闲线程通常用于执行一些低优先级的任务或者进行系统的休眠等操作。 RT-Thread的空闲线程不能在线程中堵塞的原因是为了确保系统…

将多张图片拼接成图像矩阵图

用Python实现将12张图片排列成n*m的图像矩阵图 目录 引言环境准备代码实现效果演示总结 引言 在图像处理和图像展示的应用中&#xff0c;将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。 环境准备 为了实…

【动态规划刷题 2】不同路径不同路径 II

不同路径 62 . 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…

iPhone 安装 iOS 17公测版(Public Beta)

文章目录 步骤1. 备份iPhone资料步骤2. 申请iOS 17 公测Beta 资格步骤3. 下载iOS 16 Beta 公测描述档步骤4. 选择iOS 17 Beta 公测描述档更新项目步骤5. 升级iOS 17 Public Beta 公开测试版 苹果已经开始向大众释出首个iOS 17 公开测试版/ 公测版( iOS 17 Public Beta)&#xf…

【C++】类和对象 - 上

目录 1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则 8. this指针8.1 引出8.2 this指针的特性 总结 1. 面…

ES查看集群信息(健康状态、分片、索引等)

1、查看集群状态使用频率最高的方法 http://192.168.1.101:9200/ 注意&#xff1a;不同环境的ip不同 一般我们通过这个方式来验证ES服务器是否启动成功。 2、_cat/health 查看集群健康状态 [rootCENTOS01 ~]# curl http://192.168.1.101:9200/_cat/health?v epoch tim…

Spring Data【Spring Data Redis、Spring Data ElasticSearch】(二)-全面详解(学习总结---从入门到深化)

目录 四、 Spring Data Redis 五、 Spring Data ElasticSearch 四、 Spring Data Redis Redis 是一个基于内存的数据结构存储系统&#xff0c;它可以用作数据库或者缓存。它支持多种 类型的数据结构&#xff0c;这些数据结构类型分别为 String&#xff08;字符串&#xff09…

0基础系列C++教程 从0开始 第四课

目录 来学习新的内容吧 1 输入 第四课课后习题1&#xff1a; 2 变量 怎么定义变量&#xff1f; 定义变量 第四课课后习题2&#xff1a; 来学习新的内容吧 1 输入 C中既然有了输出 那必然有输入 这时 我们就要用到 cin 函数啦 cin 用法与cout 相似 但却有一个差异 co…

Vue(十八):echarts地图省市区联动

效果 数据来源 https://datav.aliyun.com/portal/school/atlas/area_selector 接口请求地址 https://geo.datav.aliyun.com/areas_v3/bound/geojson?code100000_full 源码 样式 .map {width: 1000px;height: 700px; }布局 <template><div class"map">…

linux -网络编程-多线程并发服务器

目录 1.三次握手和四次挥手 2 滑动窗口 3 函数封装思想 4 高并发服务器 学习目标&#xff1a; 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器 1.三次握手和四次挥手 思考: 为什么…

linux centos7 安装java17

删除旧版本的java或者说是自带的&#xff0c;免得干扰 查找java rpm -qa|grep java java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch tzdata-java-2020a-1.el7.noarch python-javapackages-3.4.1-11.el7.noarch java-1.8.0-open…

力扣热门100题之矩阵置0【中等】

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例 2&#xff…

❤️创意网页:萌翻少女心的果冻泡泡 - 创造生动有趣的视觉效果

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

计算机网络(Computer Networks)基础

本篇介绍计算机网络的基础知识。 文章目录 1. 计算机网络历史2. 以太网" (Ethernet)2.1 以太网" (Ethernet)的简单形式及概念2.2 指数退避解决冲突问题2.3 利用交换机减少同一载体中设备2.4 互联网&#xff08;The Internet&#xff09;2.5 路由(routing)2.6 数据包…

渗透测试基础知识(1)

渗透基础知识一 一、Web架构1、了解Web2、Web技术架构3、Web客户端技术4、Web服务端组成5、动态网站工作过程6、后端存储 二、HTTP协议1、HTTP协议解析2、HTTP协议3、http1.1与http2.0的区别4、HTTP协议 三、HTTP请求1、发起HTTP请求2、HTTP响应与请求-HTTP请求3、HTTP响应与请…