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

news/2024/4/18 12:35:04/文章来源:https://blog.csdn.net/qq_21891743/article/details/132006080

文章目录

  • 🚀一、介绍
  • 🚀二、开始编码
    • 🔎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.luyixian.cn/news_show_337515.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL-每日一题【1070. 产品销售分析 III】

题目 销售表 Sales&#xff1a; 产品表 Product&#xff1a; 编写一个 SQL 查询&#xff0c;选出每个销售产品 第一年 销售的 产品 id、年份、数量 和 价格。 结果表中的条目可以按 任意顺序 排列。 查询结果格式如下例所示&#xff1a; 示例 1&#xff1a; 解题思路 前置知…

LLaMA:开放和高效的基础语言模型

Part1前言 我们介绍了LLaMA&#xff0c;这是一个参数范围从7B到65B的基础语言模型集合。我们在数以万亿计的标记上训练我们的模型&#xff0c;并表明有可能完全使用公开可用的数据集来训练最先进的模型&#xff0c;而不必求助于专有的和不可获取的数据集。特别是&#xff0c;L…

PDF.js实现搜索关键词高亮显示效果

在static\PDF\web\viewer.js找到定义setInitialView方法 大约是在1202行&#xff0c;不同的pdf.js版本不同 在方法体最后面添加如下代码&#xff1a; // 高亮显示关键词---------------------------------------- var keyword new URL(decodeURIComponent(location)).searchP…

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

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

sqlSugar应用表值函数

一、新建表值函数 TableIntSplit 二、新建类 var employees _sqlSugarClient.Queryable<Employees>().InnerJoin(_sqlSugarClient.SqlQueryable<TableID>("select * from dbo.TableIntSplit(ids,split)").AddParameters(new { ids "1,2", s…

Spring源码(四)— 创建BeanDefinition

在第一章序言的图示中有提到&#xff0c;Spring中的配置文件都是通过各种的BeanDefinition来进行解析&#xff0c;并且支持不同类型的文件进行扩展。所以在创建完DefaultListableBeanFactory后&#xff0c;会通过BeanDefinition来解析传入的xml配置文件。 loadBeanDefinitions…

【业务功能篇59】Springboot + Spring Security 权限管理 【下篇】

UserDetails接口定义了以下方法&#xff1a; getAuthorities(): 返回用户被授予的权限集合。这个方法返回的是一个集合类型&#xff0c;其中每个元素都是一个GrantedAuthority对象&#xff0c;表示用户被授予的权限。getPassword(): 返回用户的密码。这个方法返回的是一个字符…

打开域名跳转其他网站,官网被黑解决方案(Linux)

某天打开网站&#xff0c;发现进入首页&#xff0c;马上挑战到其他赌博网站。 事不宜迟&#xff0c;不能让客户发现&#xff0c;得马上解决 我的网站跳转到这个域名了 例如网站跳转到 k77.cc 就在你们部署的代码的当前文件夹下面&#xff0c;执行下如下命令 find -type …

【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

文章目录 前言一、反向迭代器封装&#xff08;reverseiterator&#xff09;1.构造函数1解引用操作.3.->运算符重载4.前置&#xff0c;后置5.前置--&#xff0c;后置--6.不等号运算符重载7.完整代码 二、rbegin&#xff08;&#xff09;以及rend&#xff08;&#xff09;1.rb…

CRM如何进行数据分析?有什么用?

什么是CRM数据分析软件&#xff1f;CRM数据分析软件可以对数据进行挖掘、统计和分析&#xff0c;帮助企业从大量的客户数据中提取有价值的信息&#xff0c;分析数据背后的含义&#xff0c;从而帮助企业更好地运营的一种工具。 1、提高客户满意度 CRM数据分析软件可以通过对客户…

Java的第十五篇文章——网络编程(后期再学一遍)

目录 学习目的 1. 对象的序列化 1.1 ObjectOutputStream 对象的序列化 1.2 ObjectInputStream 对象的反序列化 2. 软件结构 2.1 网络通信协议 2.1.1 TCP/IP协议参考模型 2.1.2 TCP与UDP协议 2.2 网络编程三要素 2.3 端口号 3. InetAddress类 4. Socket 5. TCP网络…

前端调用合约如何避免出现transaction fail

前言&#xff1a; 作为开发&#xff0c;你一定经历过调用合约的时候发现 gas fee 超出限制&#xff0c;但是不知道报了什么错。这个时候一般都是触发了require错误合约校验。对于用户来说他不理解为什么一笔交易会花费如此大的gas&#xff0c;那我们作为开发如何尽量避免这种情…

基于注解手写Spring的IOC(上)

一、思路 先要从当前类出发找到对应包下的所有类文件&#xff0c;再从这些类中筛选出类上有MyComponent注解的类&#xff1b;把它们都装入Map中&#xff0c;同时类属性完成MyValue的赋值操作。 二、具体实现 测试类结构&#xff1a; 测试类&#xff1a;myse、mycontor、BigSt…

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

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

用友畅捷通T+服务器数据库中了locked勒索病毒怎么办,如何处理解决

计算机技术的发展&#xff0c;也为网络安全埋下隐患&#xff0c;其中勒索病毒攻击已经成为企业和组织面临的严重威胁之一。作为一款被广泛使用的企业资源管理软件&#xff0c;用友畅捷通T系统也成为黑客攻击的目标之一。近期&#xff0c;我们收到很多企业的求助&#xff0c;公司…

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …

Intel RealSense D455(D400系列) Linux-ROS 安装配置(亲测可用)

硬件&#xff1a;Intel RealSense D455 系统&#xff1a;Ubuntu 18.04 Part_1: 安装librealsense SDK2.0 1.1 注册密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE或者 sudo apt-key adv --keyserver hkp:/…

【RabbitMQ】golang客户端教程1——HelloWorld

一、介绍 本教程假设RabbitMQ已安装并运行在本机上的标准端口&#xff08;5672&#xff09;。如果你使用不同的主机、端口或凭据&#xff0c;则需要调整连接设置。如果你未安装RabbitMQ&#xff0c;可以浏览我上一篇文章Linux系统服务器安装RabbitMQ RabbitMQ是一个消息代理&…

25.10 matlab里面的10中优化方法介绍—— 函数fmincon(matlab程序)

1.简述 关于非线性规划 非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中&#xff0c;为了便于我们理解&#xff0c;引导我们进入规划模型的一种情况。相比之下&#xff0c;非线性规划会更加贴近…

联想北京公司研发管理部高级经理周燕龙受邀为第十二届中国PMO大会演讲嘉宾

联想&#xff08;北京&#xff09;有限公司研发管理部高级经理周燕龙先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;PMO如何助力研发。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; PMO在…