前端聊天室页面开发(赛博朋克科技风,内含源码)

        肝了一天,经过各种处理美化,肝出来了一个赛博朋克科技风的前端页面,用的原生三件套html+css+javascript开发的,本来想是加点功能调用一下gpt接口,但是基本都需要webscoket通信,可惜我js学的不是很深入,捣鼓半天还是放弃了,如果有感兴趣一起做点日常生活用的小demo的小伙伴也可以联系我,有觉得页面还不错想要源码的小伙伴,我把源码放在下面啦,记得点赞收藏哦。

1-indexl.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>聊天页面</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="page-container">
        <div class="chat-container">
            <div class="chat-header">
                <h1>ai聊天室</h1>
            </div>
            <div class="chat-messages message-container" id="chatMessages">
                <!-- 消息将在这里动态添加 -->
            </div>
            <div class="user-info">当前用户: 我</div>
            <form class="chat-input" id="chatForm">
                <input type="text" id="messageInput" placeholder="输入消息..." required>
                <button type="submit">发送</button>
            </form>
        </div>
        <div class="divider"></div>
        <div class="text-container">
            <div id="textContent" class="text-content">
                这里是初始的长文本内容。点击左侧的消息可以更新这里的内容。
            </div>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>

2-styles.css

body {
    font-family: '隶书';  
    margin: 0;
    padding: 0;
    background-color: rgba(20, 28, 43, 0.7); /* 使用半透明背景 */
    color: #7ee2ff;
    height: 100vh;
    overflow: hidden;

    background-image : url('./1.jpg');  
    /* 背景图片不重复 */  
    background-repeat: no-repeat;  
    /* 背景图片居中显示 */  
    background-position: center;  
    /* 背景图片覆盖整个元素 */  
    background-size: cover;  
}

.page-container {
    display: flex;
    height: 100vh;

}

.chat-container {
    
    width: 50%;
    background-color: rgba(20, 28, 43, 0.7); /* 使用半透明背景 */
    display: flex;
    flex-direction: column;
    box-shadow: 0 0 20px rgba(126, 226, 255, 0.3);


}

.divider {
    width: 2px;
    background-color: #7ee2ff;
    box-shadow: 0 0 10px #7ee2ff;
}

.text-container {
    width: 50%;
    padding: 20px;
    background-color: rgba(20, 28, 43, 0.7); /* 使用半透明背景 */
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    will-change: transform;
    backface-visibility: hidden;


}

.text-content {
    font-size: 18px;
    line-height: 1.6;
    white-space: pre-wrap;
    word-wrap: break-word;
    color: #7ee2ff;
    text-shadow: 0 0 5px #7ee2ff;
}

.chat-header {
    background-color: rgba(20, 28, 43, 0.7); /* 使用半透明背景 */
    /* color: #ff00ff; */
    padding: 15px;
    text-align: center;
    box-shadow: 0 2px 4px rgba(126, 226, 255, 0.3);
}

.chat-header h1 {
    margin: 0;
    font-size: 24px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
}

.chat-messages {
    flex-grow: 1;
    overflow-y: auto;
    padding: 15px;
    background-color: rgba(20, 28, 43, 0.7); /* 使用半透明背景 */
    /* background-image: linear-gradient(to bottom, #141c2b 0%, #0a0e17 100%); */
    will-change: transform;
    backface-visibility: hidden;
}

.message-container {
    display: flex;
    flex-direction: column;
}

.user-info {
    padding: 10px 15px;
    background-color: rgba(20, 28, 43, 0.7); /* 使用半透明背景 */
    color: #d3d3d3;
    font-weight: bold;
    text-align: center;
    box-shadow: 0 -2px 4px rgba(126, 226, 255, 0.3);
    border-bottom: 1px solid #7ee2ff;
}

.message {
    display: inline-block;
    margin-bottom: 15px;
    padding: 10px 15px;
    max-width: 60%;
    transition: all 0.2s ease;
    cursor: pointer;
    word-wrap: break-word;
    position: relative;
    font-size: 18px;
    box-shadow: 0 0 5px rgba(126, 226, 255, 0.3);
}

.message.sent {
    background-color: rgba(30, 44, 74, 0.8);
    color: #7ee2ff;
    border-radius: 20px 0px 20px 20px;
    align-self: flex-end;
    margin-left: auto;
    border: 1px solid rgba(126, 226, 255, 0.3);
}

.message.received {
    background-color: rgba(20, 28, 43, 0.8);
    color: #ff00ff;
    border-radius:  0px 20px 20px 20px;
    border: 1px solid rgba(255, 0, 255, 0.3);
}

.message:hover {
    transform: translateY(-2px);
    box-shadow: 0 2px 10px rgba(126, 226, 255, 0.5);
}


.chat-input {
    display: flex;
    padding: 15px;
    background-color: rgba(26, 26, 26, 0.8);
    box-shadow: 0 -2px 10px rgba(126, 226, 255, 0.1);
}

.chat-input input {
    flex-grow: 1;
    padding: 10px 15px;
    border: 1px solid rgba(126, 226, 255, 0.3);
    border-radius: 20px;
    background-color: rgba(10, 14, 23, 0.8);
    color: #7ee2ff;
    margin-right: 10px;
    font-family: 'Orbitron', sans-serif;
    transition: all 0.2s ease;
}

.chat-input input:focus {
    outline: none;
    border-color: #7ee2ff;
    box-shadow: 0 0 5px rgba(126, 226, 255, 0.5);
}

.chat-input button {
    padding: 10px 20px;
    background-color: rgba(30, 44, 74, 0.8);
    color: #7ee2ff;
    border: 1px solid rgba(126, 226, 255, 0.3);
    border-radius: 20px;
    cursor: pointer;
    transition: all 0.2s ease;
    font-family: 'Orbitron', sans-serif;
    text-transform: uppercase;
}

.chat-input button:hover {
    background-color: rgba(126, 226, 255, 0.2);
    color: #7ee2ff;
    box-shadow: 0 0 10px rgba(126, 226, 255, 0.5);
}

/* 自定义滚动条 */
::-webkit-scrollbar {
    width: 8px;
}

::-webkit-scrollbar-track {
    background: #0a0e17;
}

::-webkit-scrollbar-thumb {
    background: linear-gradient(to bottom, #7ee2ff, #ff00ff);
    border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(to bottom, #7ee2ff, #ff00ff);
}

/* 添加霓虹灯效果 */
* {
    box-sizing: border-box;
}

@media (prefers-reduced-motion: reduce) {
    * {
        animation: none !important;
        transition: none !important;
    }
}

3-script.js

document.addEventListener('DOMContentLoaded', () => {
    const chatForm = document.getElementById('chatForm');
    const messageInput = document.getElementById('messageInput');
    const chatMessages = document.getElementById('chatMessages');
    const textContent = document.getElementById('textContent');

    chatForm.addEventListener('submit', (e) => {
        e.preventDefault();
        const message = messageInput.value.trim();
        if (message) {
            addMessage(message, 'sent');
            messageInput.value = '';
            // 模拟接收到的消息
            setTimeout(() => {
                addMessage('这是一条自动回复的消息。', 'received');
            }, 1000);
        }
    });

    function addMessage(text, type) {
        const messageElement = document.createElement('div');
        messageElement.classList.add('message', type);
        messageElement.textContent = text;
        
        // 添加点击事件
        messageElement.addEventListener('click', () => {
            updateTextContent(text);
        });

        const messageContainer = document.createElement('div');
        messageContainer.classList.add('message-container');
        messageContainer.appendChild(messageElement);

        chatMessages.appendChild(messageContainer);
        chatMessages.scrollTop = chatMessages.scrollHeight;
    }

    function updateTextContent(text) {
        textContent.textContent = text;
    }

    // 添加一些初始消息
    addMessage("你好!欢迎来到炫酷聊天室。", "received");
    addMessage("这是一个示例消息。", "sent");
    addMessage("点击任何消息可以在右侧查看完整内容。", "received");

    // messageInput.addEventListener('input', function() {
    //     const maxLength = Math.floor(chatMessages.offsetWidth * 0.6);
    //     if (this.value.length > maxLength) {
    //         this.value = this.value.slice(0, maxLength);
    //     }
    // });
});

背景图片图片:1.jpg

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

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

相关文章

使用Vue.js构建响应式Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Vue.js构建响应式Web应用 1 引言 2 Vue.js简介 3 安装Vue CLI 4 创建Vue项目 5 设计应用结构 6 创建组件 7 使用…

C++——string的模拟实现(下)

目录 成员函数 3.4 修改操作 (3)insert()函数 (4)pop_back()函数 (5)erase()函数 (6)swap()函数 3.5 查找操作 (1)find()函数 (2)substr()函数 3.6 重载函数 (1)operator赋值函数 (2)其他比较函数 (3)流插入和流提取 完整代码 结束语 第一篇链接&#xff1a;C——…

基于Springboot无人驾驶车辆路径规划系统(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【大模型】Ollama+WebUI+AnythingLLM搭建本地知识库

目录 1 部署Ollama 1.1 下载镜像ollama 1.2 运行ollama 1.3 验证 2 模型选型 3 安装模型 3.1 选择模型安装 3.2 删除模型(选看) 4 安装webUI 4.1 拉镜像 4.2 启动服务 5 访问 5.1 注册 5.2 登录 5.3 设置 6 使用 7 使用api来调用 8 安装AnythingLLM搭建本地…

27.9 调用go-ansible执行playbook拷贝json文件重载采集器

本节重点介绍 : go-ansible执行playbook编写分发重载的playbook编译执行 测试停掉一个节点测试停掉的节点再回来 go-ansible执行playbook 新增 goansiblerun/run.go package goansiblerunimport ("context""github.com/apenella/go-ansible/pkg/execute&qu…

Python基础学习(四)程序控制结构

代码获取&#xff1a;https://github.com/qingxuly/hsp_python_course 完结版&#xff1a;Python基础学习完结版 程序控制结构 程序流程控制介绍 基本介绍 程序流程控制绝对程序是如何执行的&#xff0c;是我们必须掌握的&#xff0c;主要有三大流程控制语句。顺序控制、分支…

Linux中DHCP服务器配置和管理

文章目录 一、DHCP服务1.1、DHCP的工作流程1.2、DHCP的工作模式1.3、dhcp的主要配置文件 二、安装DHCP服务2.1、更新yum源2.2、安装DHCP服务软件包2.3、配置DHCP服务2.4、启用DHCP服务&#xff08;解决报错&#xff09;2.4.1、查看dhcpd服务的状态和最近的日志条目2.4.2、查看与…

js构造函数和原型对象,ES6中的class,四种继承方式

一、构造函数 1.构造函数是一种特殊的函数&#xff0c;主要用来初始化对象 2.使用场景 常见的{...}语法允许创建一个对象。可以通过构造函数来快速创建多个类似的对象。 const Peppa {name: 佩奇,age: 6,sex: 女}const George {name: 乔治,age: 3,sex: 男}const Mum {nam…

【react 和 vue】 ---- 实现组件的递归渲染

1. 需求场景 今天遇到了一个需求&#xff0c;就是 HTML 的递归渲染。问题就是商品的可用时间&#xff0c;使用规则等数据是后端配置&#xff0c;然后配置规则则是可以无限递归的往下配置&#xff0c;可以存在很多级。后端实现后&#xff0c;数据返回前端&#xff0c;就需要前端…

【mysql 进阶】2-1. MySQL 服务器介绍

MySQL 服务器简介 通常所说的 MySQL 服务器指的是mysqld程序&#xff0c;当运⾏mysqld后对外提供MySQL 服务&#xff0c;这个专题的内容涵盖了以下关于MySQL 服务器以及相关配置的内容&#xff0c;包括&#xff1a; 服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选…

前后端请求、返回数据的多种方式

Springboot项目的业务逻辑 &#x1f319;项目基本结构&#xff1a; 通常情况下&#xff0c;我们在搭建后端项目的时候&#xff0c;处理业务逻辑我们需要用到Controller,Service,Mapper(mybatis,mybatis-plus)&#xff0c;Entry各层之间的相互调用来完成&#xff0c;还有就是我…

数据库->增删改查

目录 一、CRUD简介 二、Create新增 1.单行数据插入 2.查询 3. 多行数据插入 4.执行本机的SQL脚本插入 三、Retrieve检索 1.全列查询 2.指定列查询 3.查询字段为表达式 3.1 常量表达式 3.2列的值与常量运算 3.3列与列之间的运算 3.4为列指定别名 4.结果查询去重…

高等数学-宋浩版2.0-映射

映射&#xff1a;X,Y为非空集合&#xff0c;存在法则F,对X(原像)中每个元素X&#xff0c;按法则F&#xff0c;在Y中有唯一元素与之对应&#xff0c;F为x到Y&#xff08;镜像&#xff09;的映射。f:X->Y X原像&#xff0c;Y像&#xff0c;x定义域&#xff0c;Df,Rf &#x…

php后端学习,Java转php

遇到前后端跨域 php解决跨域问题可以加上下面的代码&#xff1a; header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端&#xff0c; 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…

BUUCTF之web篇

第一题 [极客大挑战 2019]EasySQL 打开靶机后可以看到这是一个登陆的页面 我们可以尝试两种方式登录 弱口令爆破&#xff08;burpsuite&#xff09; 通过SQL注入里的万能密码来跳过账户和密码验证的过程 这里就需要万能密码aor true # 在这里单引号的作用是结束用户名或者密码…

Python基于TensorFlow实现简单循环神经网络回归模型(SimpleRNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 Simple RNN是一种基础的循环神经网络&#xff0c;它能够处理序列数据&#xff0c;例如文本、时间序…

React写关键字高亮的三个方案

1.js正则replaceAlldangerouslySetInnerHTML{{ __html: xxx }}危险属性 步骤最简单,但是是危险属性,不推荐使用,项目中实在没有头绪,可以使用它应急 通过useMemo计算得到新的状态值,赋值给dangerouslySetInnerHTML属性的__html 关键代码: const [state1, setState1] useSt…

【网络原理】网络地址转换----NAT技术详解

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 我们在 IP协议 一文中介绍过&#xff0c;由于IPv4协议中 IP地址只有32位&#xff0c;导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…

java核心技术点都有哪些

1. 面向对象编程&#xff08;OOP&#xff09; 核心概念&#xff1a;类、对象、继承、封装、多态。 比喻&#xff1a;面向对象编程就像是在搭建一个积木城堡。类&#xff08;Class&#xff09;是城堡的设计图纸&#xff0c;它定义了城堡的结构和功能&#xff1b;对象&#xff08…

传输层TCP

报头 1.报头和有效载荷如何分离将&#xff0c;有效载荷向上交付&#xff1f; tcp有个标准报头长度为20&#xff0c;那是不是以为我们可以像udp一样分离依靠报头大小去分离&#xff0c;我们仔细去看我们报头中还有个选项没包含到。 我们还有个首部长度&#xff0c;四位可以表…