前端技术(23) : 聊天页面

news2024/12/26 21:35:57

来源: GPT生成之后微调

效果图

HTML代码

 

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>聊天</title>
		<style>
			body {
				font-family: Arial, sans-serif;
				margin: 0;
				padding: 0;
			}

			.container {
				display: flex;
				height: 100vh;
			}

			.contact-list {
				flex: 1;
				background-color: #f4f0ff;
				/* 浅紫色背景 */
				padding: 20px;
				max-width: 300px;
				border-right: 1px solid #DDD;
				box-sizing: border-box;
				display: flex;
				flex-direction: column;
				gap: 10px;
			}

			.contact {
				padding: 10px 20px;
				cursor: pointer;
				transition: background-color 0.3s;
				display: flex;
				justify-content: space-between;
				align-items: center;
			}

			.contact.active {
				background-color: #e6d5ff;
				/* 选中联系人更深的紫色背景 */
			}

			.contact-name {
				font-weight: bold;
			}

			.contact-status {
				width: 10px;
				height: 10px;
				border-radius: 50%;
			}

			.status-online {
				background-color: #0F0;
				/* 在线状态的颜色 */
			}

			.status-offline {
				background-color: #F00;
				/* 离线状态的颜色 */
			}

			.status-away {
				background-color: #FF0;
				/* 离开状态的颜色 */
			}

			.conversation {
				flex: 2;
				background-color: #f9f7ff;
				/* 淡紫色对话窗口 */
				padding: 20px;
				box-sizing: border-box;
				display: flex;
				flex-direction: column;
			}

			.message-container {
				flex: 1;
				overflow-y: auto;
				padding: 10px;
				display: flex;
				flex-direction: column;
			}

			.message {
				padding: 10px;
				margin: 20px;
				max-width: 70%;
				word-wrap: break-word;
				border-radius: 10px;
				box-shadow: 2px 2px 5px #ccc;
				display: inline-block;
				clear: both;
			}

			.message-time {
				font-size: 12px;
				color: #666;
				position: absolute
				margin-left: 10px;
				float: right;
			}

			.user-message {
				background-color: #baf2ff;
				/* 浅蓝色用户消息气泡 */
				align-self: flex-end;
			}

			.contact-message {
				background-color: #f7e7ff;
				/* 淡紫色联系人消息气泡 */
				align-self: flex-start;
			}

			.input-container {
				display: flex;
				align-items: center;
			}

			.message-input {
				flex: 1;
				padding: 10px;
				margin: 10px;
				box-sizing: border-box;
				border: 1px solid #DDD;
				border-radius: 5px;
				background-color: #f4f0ff;
				/* 浅紫色背景 */
				resize: none;
				/* 禁止用户调整文本域大小 */
				font-size: 18px;
			}

			.send-button {
				padding: 10px 20px;
				margin: 10px;
				border: none;
				background-color: #8a4d76;
				/* 深紫色按钮 */
				color: #FFF;
				border-radius: 5px;
				cursor: pointer;
			}

			h2 {
				margin-top: 0;
				padding-top: 10px;
				color: #8a4d76;
				/* 深紫色标题 */
			}

			h3 {
				margin-top: 0;
				padding-top: 10px;
				color: #8a4d76;
				/* 深紫色标题 */
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="contact-list">
				<h2>联系人列表</h2>
				<div class="contact active" onclick="changeActive(this)">
					<span class="contact-name">联系人1</span>
					<div class="contact-status status-online"></div>
				</div>
				<div class="contact" onclick="changeActive(this)">
					<span class="contact-name">联系人2</span>
					<div class="contact-status status-offline"></div>
				</div>
				<div class="contact" onclick="changeActive(this)">
					<span class="contact-name">联系人3</span>
					<div class="contact-status status-away"></div>
				</div>
			</div>
			<div class="conversation" id="conversation">
				<h3 id="current-contact">联系人姓名</h3>
				<div class="message-container" id="message-container">
				</div>
				<div class="input-container">
					<textarea class="message-input" id="message-input" placeholder="Enter 发送, ALT+回车 换行"
						rows="8"></textarea>
					<!-- <button class="send-button" onclick="sendMessage()">发送</button> -->
				</div>
			</div>
		</div>

		<script>
			function changeActive(element) {
				var contactList = document.getElementsByClassName('contact');
				for (var i = 0; i < contactList.length; i++) {
					contactList[i].classList.remove('active');
				}
				element.classList.add('active');
				document.getElementById('current-contact').innerText = element.querySelector('.contact-name').innerText;
			}

			// 监听键盘事件
			document.getElementById('message-input').addEventListener('keydown', function(e) {
				if (e.key === 'Enter' && !e.altKey) { // 按下 Enter 键发送消息
					e.preventDefault(); // 阻止默认换行行为
					sendMessage();
				} else if (e.key === 'Enter' && e.altKey) { // 按下 Alt+Enter 换行
					this.value += '\n';
				}
			});

			function sendMessage() {
				var messageInput = document.getElementById('message-input').value;
				var messageContainer = document.getElementById('message-container');
				var div = document.createElement('div');
				div.className = 'message user-message';
				div.innerHTML =   messageInput+'</br></br><span class="message-time">12:35 PM</span>';
				div.style.whiteSpace = 'pre-wrap';
				messageContainer.appendChild(div);
				messageContainer.scrollTop = messageContainer.scrollHeight;
				document.getElementById('message-input').value = '';

				// 模拟对方回复消息
				setTimeout(function() {
					var replyDiv = document.createElement('div');
					replyDiv.className = 'message contact-message';
					replyDiv.innerHTML = messageInput+'</br></br><span class="message-time">12:35 PM</span>';
					replyDiv.style.whiteSpace = 'pre-wrap';
					messageContainer.appendChild(replyDiv);
					messageContainer.scrollTop = messageContainer.scrollHeight;
				}, 1000);
			}
		</script>
	</body>
</html>

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

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

相关文章

ubuntu的matlab使用心得

1.读取视频 v VideoReader(2222.mp4);出问题&#xff0c;报错&#xff1a; matlab 错误使用 VideoReader/initReader (第 734 行) 由于出现意外错误而无法读取文件。原因: Unable to initialize the video properties 出错 audiovideo.internal.IVideoReader (第 136 行) init…

基于SpringBoot+Vue框架的在线考试系统的设计与实现

基于SpringBootVue框架的在线考试系统的设计与实现 系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环…

软错误防护技术在车规MCU中应用

在大气层内&#xff0c;宇宙射线粒子与大气分子发生核反应生成大气中子。大气中子入射微电子器件或电路将会诱发单粒子效应&#xff08;SEE&#xff09;&#xff0c;效应类型主要有单粒子翻转&#xff08;SEU&#xff09;、单粒子瞬态&#xff08;SET&#xff09;、单粒子锁定&…

【数据中心建设资料】数据中心安全建设解决方案,数据中心整理解决方案,数据中心如何做到安全保障,数据中台全方案(Word全原件)

第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏系统 1.3.8…

WLAN AutoConfig服务假死?重启服务恢复网络连接!

目录 背景&#xff1a; 过程&#xff1a; 可能引起原因&#xff1a; 具体解决步骤&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 总结&#xff1a; 背景&#xff1a; 这个问题困扰我好长一段时间了&#xff0c;每次下班将电脑关机后&#xff0c;次日早上电脑开机…

Hadoop生态圈框架部署 伪集群版(六)- MySQL安装配置

文章目录 前言一、MySQL安装与配置1. 安装MySQL2. 安装MySQL服务器3. 启动MySQL服务并设置开机自启动4. 修改MySQL初始密码登录5. 设置允许MySQL远程登录6. 登录MySQL 卸载1. 停止MySQL服务2. 卸载MySQL软件包3. 删除MySQL配置文件及数据目录 前言 在本文中&#xff0c;我们将…

运用蓝光三维扫描仪的艺术与科技的完美融合-石膏头像模型3D扫描真实复刻

石膏头像具有独特的魅力&#xff0c;每一处细节都彰显着艺术之美。无论是深邃的眼神&#xff0c;还是精致的轮廓&#xff0c;都让人陶醉其中。 随着雕塑形式的日渐丰富&#xff0c;越来越多的新材料和新的塑造手法被运用到雕塑创作中&#xff0c;蓝光三维扫描技术的应用&#…

【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变

【大语言模型】ACL2024论文-24 图像化歧义&#xff1a;Winograd Schema 挑战的视觉转变 目录 文章目录 【大语言模型】ACL2024论文-24 图像化歧义&#xff1a;Winograd Schema 挑战的视觉转变目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要…

深入浅出:Gin框架路由与HTTP请求处理

深入浅出&#xff1a;Gin框架路由与HTTP请求处理 引言 在Web开发中&#xff0c;路由和HTTP请求处理是构建API的核心部分。Gin框架作为Go语言中最受欢迎的Web框架之一&#xff0c;提供了简洁而强大的工具来处理这些任务。本文将深入浅出地介绍如何使用Gin框架进行路由定义、处…

vscode + cmake 管理员权限调试

Ubuntu 22.04 使用 VsCode CMake 开发 ICMP ping 功能&#xff0c;执行到下面的语句时报错&#xff1a; socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); --------------------------------------- 程序报错&#xff1a; Operation not permitted 查找原因&#xff0c;需要管理员权…

MATLAB数学建模之画图汇总

MATLAB是一种强大的数学软件&#xff0c;广泛应用于工程计算、控制设计、信号处理等领域。在数学建模中&#xff0c;MATLAB的绘图功能可以帮助我们直观地展示数据和模型结果。 1. 二维数据曲线图 1.1 绘制二维曲线的基本函数 plot函数用于绘制二维平面上的线性坐标曲线图&am…

李飞飞首个“空间智能”模型发布:一张图,生成一个3D世界 | LeetTalk Daily

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 在人工智能技术迅速发展的背景下&#xff0c;李飞飞创立的世界实验室于近期发布了首个“空间智能”模型&#xff0c;这一创新成果引发了3D生…

力扣--543.二叉树的直径

题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 代码 /** Definition for a binary tree node.public…

你是如何找bug的?bug分析的正确打开方式

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Bug严重级别(Severity&#xff0c;Bug级别)&#xff1a;是指因缺陷引起的故障对软件产品的影响程度&#xff0c;由测试人员指定。 A-Crash&#xff1a;造成系统或…

QT获取tableview选中的行和列的值

查询数据库数据放入tableview&#xff08;tableView_database&#xff09;后 QSqlQueryModel* sql_model new QSqlQueryModel(this);sql_model->setQuery("select * from dxxxb_move_lot_tab");sql_model->setHeaderData(0, Qt::Horizontal, tr("id&quo…

Github 2024-12-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-12-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目9Go项目2HTML项目1Shell项目1Jupyter Notebook项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Py…

python调用GPT-4o实时音频 Azure OpenAI GPT-4o Audio and /realtime

发现这块网上信息很少&#xff0c;记录一下 微软azure入口 https://learn.microsoft.com/zh-cn/azure/ai-services/openai/realtime-audio-quickstart?pivotsprogramming-language-ai-studio sdk文档 https://github.com/azure-samples/aoai-realtime-audio-sdk?tabread…

tomcat+jdbc报错怎么办?

1. 虽然mysql8.0以上的不用手动添加driver类&#xff0c;但是一旦加上driver类&#xff0c;就要手动添加了 不然会报找不到driver类的错误 2. java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:xXX?serverTimezoneU…

C#调用c++创建的动态链接库dll文件

在C#中调用外部DLL文件是一种常见的编程实践&#xff0c;它具有以下几个重要意义&#xff1a;1.代码重用&#xff1b;2.模块化&#xff1b;3.性能优化&#xff1b;4.安全性&#xff1b;5.跨平台兼容性&#xff1b;6.方便更新和维护&#xff1b;7.利用特定技术或框架&#xff1b…

【Notepad++】---设置背景为护眼色(豆沙绿)最新最详细

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Notepad】---设置背景为护眼色&#xf…