QQ风格客服聊天窗口

QQ风格客服聊天窗口

    • 展示
    • 引入方式

展示

在这里插入图片描述
在这里插入图片描述

引入方式

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>QQ风格客服聊天窗口</title><style>body {font-family: 'Microsoft YaHei', sans-serif;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #000000;}.chat-container {width: 800px;height: 500px;border-radius: 5px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);display: flex;flex-direction: column;overflow: hidden;}.chat-header {background: linear-gradient(to right, #12B7F5, #1E90FF);color: white;padding: 10px 15px;display: flex;justify-content: space-between;align-items: center;}.chat-title {font-weight: bold;font-size: 16px;}.close-btn {cursor: pointer;font-size: 18px;}.chat-messages {flex: 1;padding: 10px;background-color: #f0f0f0;overflow-y: auto;}.message {margin-bottom: 15px;display: flex;flex-direction: column;}.message-content {max-width: 70%;padding: 8px 12px;border-radius: 5px;position: relative;word-wrap: break-word;}.received .message-content {background-color: white;align-self: flex-start;border-top-left-radius: 0;}.sent .message-content {background-color: #9EEA6A;align-self: flex-end;border-top-right-radius: 0;}.message-time {font-size: 10px;color: #999;margin-top: 3px;}.received .message-time {align-self: flex-start;}.sent .message-time {align-self: flex-end;}.chat-input {display: flex;padding: 10px;background-color: #f9f9f9;border-top: 1px solid #ddd;}.chat-input textarea {flex: 1;border: 1px solid #ddd;border-radius: 3px;padding: 8px;resize: none;outline: none;font-family: inherit;height: 60px;}.send-btn {background-color: #1E90FF;color: white;border: none;border-radius: 3px;padding: 0 15px;margin-left: 10px;cursor: pointer;outline: none;}.send-btn:hover {background-color: #187bcd;}</style>
</head>
<body><!-- ## 引入方式## 必须方入文件<h1 onclick="gokefu();">1111</h1><script>function gokefu(key) {if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Phone)/i))) {window.open("./kefu.html");} else {window.open("./kefu.html");}}</script> --><div class="chat-container"><div class="chat-header"><div class="chat-title">在线客服</div><div class="close-btn">×</div></div><div class="chat-messages" id="messages"><!-- 消息将在这里动态添加 --></div><div class="chat-input"><textarea id="userInput" placeholder="请输入消息..."></textarea><button class="send-btn" id="sendBtn">发送</button></div></div><script>document.addEventListener('DOMContentLoaded', function() {const messagesContainer = document.getElementById('messages');const userInput = document.getElementById('userInput');const sendBtn = document.getElementById('sendBtn');const closeBtn = document.querySelector('.close-btn');// 配置自动回复消息const autoReplies = ["您好,欢迎咨询我们的客服系统。","请问有什么可以帮您的吗?","我们的工作时间是周一至周五9:00-18:00。","如需人工服务,请稍等片刻,我们将尽快为您转接。","感谢您的咨询,祝您生活愉快!"];let currentReplyIndex = 0;let replyInterval;// 添加消息到聊天窗口function addMessage(content, isReceived) {const messageDiv = document.createElement('div');messageDiv.className = `message ${isReceived ? 'received' : 'sent'}`;const now = new Date();const timeString = `${now.getHours()}:${now.getMinutes().toString().padStart(2, '0')}`;messageDiv.innerHTML = `<div class="message-content">${content}</div><div class="message-time">${timeString}</div>`;messagesContainer.appendChild(messageDiv);messagesContainer.scrollTop = messagesContainer.scrollHeight;}// 发送用户消息function sendUserMessage() {const message = userInput.value.trim();if (message) {addMessage(message, false);userInput.value = '';// 用户发送消息后开始自动回复if (!replyInterval) {startAutoReply();}}}// 开始自动回复function startAutoReply() {// 先立即发送第一条if (currentReplyIndex < autoReplies.length) {addMessage(autoReplies[currentReplyIndex], true);currentReplyIndex++;}// 设置定时器发送剩余消息replyInterval = setInterval(() => {if (currentReplyIndex < autoReplies.length) {addMessage(autoReplies[currentReplyIndex], true);currentReplyIndex++;} else {clearInterval(replyInterval);replyInterval = null;}}, 5000); // 每10秒发送一条}// 事件监听sendBtn.addEventListener('click', sendUserMessage);userInput.addEventListener('keypress', function(e) {if (e.key === 'Enter' && !e.shiftKey) {e.preventDefault();sendUserMessage();}});closeBtn.addEventListener('click', function() {document.querySelector('.chat-container').style.display = 'none';if (replyInterval) {clearInterval(replyInterval);}});// 初始欢迎消息setTimeout(() => {addMessage("您好,欢迎使用我们的客服系统,请问有什么可以帮您的?", true);}, 500);startAutoReply();});</script>
</body>
</html>

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

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

相关文章

【家政平台开发(37)】家政平台蜕变记:性能优化与代码重构揭秘

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

PostgreSQL 的 COPY 命令

PostgreSQL 的 COPY 命令 PostgreSQL 的 COPY 命令是高效数据导入导出的核心工具&#xff0c;性能远超常规 INSERT 语句。以下是 COPY 命令的深度解析&#xff1a; 一 COPY 命令基础 1.1 基本语法对比 命令类型语法示例执行位置文件访问权限服务器端COPYCOPY table FROM /p…

Sa-Token 自定义插件 —— SPI 机制讲解(一)

前言 博主在使用 Sa-Token 框架的过程中&#xff0c;越用越感叹框架设计的精妙。于是&#xff0c;最近在学习如何给 Sa-Token 贡献自定义框架。为 Sa-Token 的开源尽一份微不足道的力量。我将分三篇文章从 0 到 1 讲解如何为 Sa-Token 自定义一个插件&#xff0c;这一集将是前沿…

论文精度:基于LVNet的高效混合架构:多帧红外小目标检测新突破

论文地址:https://arxiv.org/pdf/2503.02220 目录 一、论文背景与结构 1.1 研究背景 1.2 论文结构 二、核心创新点解读 2.1 三大创新突破 2.2 创新结构原理 2.2.1 多尺度CNN前端 2.2.2 视频Transformer设计 三、代码复现指南 3.1 环境配置 3.2 数据集准备 3.3 训…

解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理

解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu&#xff08;Noble 版本&#xff09;上安装 Docker 时&#xff0c;我遇到了两个常见的网络问题&#xff1a;apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置&#xff0c;最终成功运行 docker run he…

指针的进阶2

六、函数指针数组 字符指针数组 - 存放字符指针的数组 char* arr[10] 整型指针数组 - 存放整型指针的数组 int* arr[10] 函数指针数组 - 存放函数指针的数组 void my_strlen() {} int main() {//指针数组char* ch[5];int arr[10] {0};//pa是是数组指针int (*pa)[10] &…

速盾:高防CDN节点对收录有影响吗?

引言 搜索引擎收录是网站运营中至关重要的环节&#xff0c;它直接影响着网站的曝光度和流量。近年来&#xff0c;随着网络安全威胁的增加&#xff0c;许多企业开始采用高防CDN&#xff08;内容分发网络&#xff09;来保护其网站免受DDoS攻击和其他形式的网络攻击。然而&#x…

2025蓝桥杯省赛C/C++研究生组游记

前言 至少半年没写算法题了&#xff0c;手生了不少&#xff0c;由于python写太多导致行末老是忘记打分号&#xff0c;printf老是忘记写f&#xff0c;for和if的括号也老是忘写&#xff0c;差点连&&和||都忘记了。 题目都是回忆版本&#xff0c;可能有不准确的地方。 …

Quill富文本编辑器支持自定义字体(包括新旧两个版本,支持Windings 2字体)

文章目录 1 新版&#xff08;Quill2 以上版本&#xff09;2 旧版&#xff08;Quill1版本&#xff09; 1 新版&#xff08;Quill2 以上版本&#xff09; 注意&#xff1a;新版设置 style"font-family: Wingdings 2" 这种带空格的字体样式会被过滤掉&#xff0c;故需特…

dbt:新一代数据转换工具

dbt&#xff08;Data Build Tool&#xff09;一款专为数据分析和工程师设计的开源工具&#xff0c;专注于 ETL/ELT 流程的数据转换&#xff08;Transform&#xff09;环节&#xff0c;帮助用户以高效、可维护的方式将原始数据转换为适合分析的数据模型。 用户只需要编写查询&am…

【家政平台开发(39)】解锁家政平台测试秘籍:计划与策略全解析

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

Java中的Map vs Python字典:核心对比与使用指南

一、核心概念 1. 基本定义 Python字典&#xff08;dict&#xff09; &#xff1a;动态类型键值对集合&#xff0c;语法简洁&#xff0c;支持快速查找。Java Map&#xff1a;接口&#xff0c;常用实现类如 HashMap、LinkedHashMap&#xff0c;需声明键值类型&#xff08;泛型&…

C语言基础之数组

1. 一维数组的创建和初始化 数组的创建 数组是一组相同类型元素的集合。 数组的创建方式&#xff1a; type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n是一个常量表达式&#xff0c;用来指定数组的大小 数组创建的实例&#xff1a; //代码1int arr1[10]; …

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解&#xff1f; code review! 文章目录 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解&#xff1f;理解这句话的关键点1.类&#xff08…

提示词 (Prompt)

引言 在生成式 AI 应用中&#xff0c;Prompt&#xff08;提示&#xff09;是与大型语言模型&#xff08;LLM&#xff09;交互的核心输入格式。Prompt 的设计不仅决定了模型理解任务的准确度&#xff0c;还直接影响生成结果的风格、长度、结构与可控性。随着模型能力和应用场景…

十二、C++速通秘籍—静态库,动态库

上一章节&#xff1a; 十一、C速通秘籍—多线程-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147055932?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp2/library CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppst…

什么是继承?js中有哪儿些继承?

1、什么是继承&#xff1f; 继承是面向对象软件技术中的一个概念。 2、js中有哪儿些继承&#xff1f; js中的继承有ES6的类class的继承、原型链继承、构造函数继承、组合继承、寄生组合继承。 2.1 ES6中类的继承 class Parent {constructor() {this.age 18;} }class Chil…

Linux进程通信入门:匿名管道的原理、实现与应用场景

Linux系列 文章目录 Linux系列前言一、进程通信的目的二、进程通信的原理2.1 进程通信是什么2.2 匿名管道通讯的原理 三、进程通讯的使用总结 前言 Linux进程间同通讯&#xff08;IPC&#xff09;是多个进程之间交换数据和协调行为的重要机制&#xff0c;是我们学习Linux操作系…

探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并

探秘Transformer系列之&#xff08;26&#xff09;— KV Cache优化 之 PD分离or合并 文章目录 探秘Transformer系列之&#xff08;26&#xff09;--- KV Cache优化 之 PD分离or合并0x00 概述0x01 背景知识1.1 自回归&迭代1.2 KV Cache 0x02 静态批处理2.1 调度策略2.2 问题…