创作一个JavaScript案例,提示工程师请了解一下。

news2024/9/27 17:47:52

在这里插入图片描述

预期

在这里插入图片描述

提问1:

web开发im的聊天记录展示的实现思路和代码实战。用户数据结构{nickName,uerID,msg,picture}。当nickName="主人"的时候聊天内容底色绿色,主人的聊天记录是靠左显示,其他人靠右显示。数据内容有长有短。多显示几天。 聊天记录带自动滚动。

结果1:


以下是一个使用HTML、CSS和JavaScript实现IM聊天记录展示的示例:

一、实现思路

  1. 数据存储与管理
    • 首先,定义一个数据结构来存储聊天消息。根据给定的用户数据结构{nickName, userID, msg, picture},可以创建一个JavaScript对象数组来表示聊天记录。
    • 对于聊天记录的显示方向和底色,根据nickName的值来判断。如果nickName = "主人",则聊天内容底色为绿色且靠左显示;否则靠右显示。
  2. HTML结构构建
    • 创建一个div元素作为聊天记录的容器,每个聊天消息可以用单独的div元素表示。
    • 在HTML中,还可以添加一些样式类来控制不同类型消息的外观。
  3. CSS样式设置
    • 为不同类型的聊天消息(主人的和其他人的)设置不同的样式,包括底色、对齐方式、边框等。
    • 设置聊天记录容器的样式,例如高度、宽度、溢出属性(用于自动滚动)等。
  4. JavaScript交互
    • 使用JavaScript来动态创建聊天消息的HTML元素,并将其添加到聊天记录容器中。
    • 实现自动滚动功能,当有新消息添加时,将聊天记录容器滚动到最底部。

二、代码实战

<!DOCTYPE html>
<html>

<head>
  <style>
    /* 聊天记录容器样式 */
   .chat - container {
      height: 300px;
      width: 300px;
      overflow - y: auto;
      border: 1px solid #ccc;
    }

    /* 主人消息样式 */
   .host - message {
      background - color: green;
      color: white;
      text - align: left;
      margin: 5px;
      padding: 10px;
      border - radius: 5px;
      max - width: 80%;
      word - break: break - word;
    }

    /* 其他用户消息样式 */
   .other - message {
      background - color: #f0f0f0;
      color: black;
      text - align: right;
      margin: 5px;
      padding: 10px;
      border - radius: 5px;
      max - width: 80%;
      word - break: break - word;
    }
  </style>
</head>

<body>
  <div class="chat - container" id="chatContainer">
  </div>

  <script>
    // 模拟聊天记录数据
    const chatData = [
      { nickName: "主人", userID: "1", msg: "欢迎来到聊天界面!", picture: "" },
      { nickName: "用户1", userID: "2", msg: "你好,主人!", picture: "" },
      { nickName: "主人", userID: "1", msg: "今天过得怎么样?", picture: "" },
      { nickName: "用户1", userID: "2", msg: "还不错呢,你呢?", picture: "" },
      { nickName: "主人", userID: "1", msg: "我也挺好的,有什么新鲜事吗?", picture: "" },
      { nickName: "用户1", userID: "2", msg: "我发现了一本好书。", picture: "" }
    ];

    const chatContainer = document.getElementById('chatContainer');

    // 遍历聊天数据并创建HTML元素显示
    chatData.forEach((message) => {
      const messageDiv = document.createElement('div');
      if (message.nickName === "主人") {
        messageDiv.className = "host - message";
      } else {
        messageDiv.className = "other - message";
      }
      messageDiv.textContent = message.msg;
      chatContainer.appendChild(messageDiv);
    });

    // 自动滚动到聊天记录底部
    chatContainer.scrollTop = chatContainer.scrollHeight;
  </script>
</body>

</html>

在上述代码中:

  1. HTML部分
    • 定义了一个div元素作为聊天记录的容器,其idchatContainer
  2. CSS部分
    • 对于聊天记录容器(.chat - container),设置了高度、宽度、垂直滚动条以及边框样式。
    • 主人消息(.host - message)和其他用户消息(.other - message)分别设置了不同的底色、对齐方式、内边距、边框半径、最大宽度和断词方式等样式。
  3. JavaScript部分
    • 首先模拟了聊天记录数据chatData
    • 然后获取聊天记录容器元素chatContainer
    • 通过遍历聊天数据,根据nickName的值创建不同样式的div元素来表示聊天消息,并将其添加到聊天记录容器中。
    • 最后,通过设置chatContainer.scrollTop = chatContainer.scrollHeight实现自动滚动到聊天记录底部的功能。
      在这里插入图片描述

提问2

css 内容的宽度是多少,div宽度就多少

结果2

实现思路

要实现CSS内容的宽度决定div宽度,可以使用display: inline - block或者display: inline - flex(如果内部是弹性布局的话)等属性。当使用inline - block时,元素会根据其内容的宽度来占据空间,而不是像block元素那样默认占据父容器的整个宽度。

最后修改后的代码

<!DOCTYPE html>
<html>

<head>
    <style>
        /* 聊天记录容器样式 */
        .chat-container {
            padding:5vh;
            height: 40vh;
            overflow-y: auto;
            border: 1px solid #ccc;
            width: 40vw;
            margin: auto;
            display: flex;
            flex-direction: column;
            background-color: rgb(100, 98, 98);
        }

        .guest-message {
            color: white;
            max-width: 30vw;
            width: auto;
            border-radius: 10px;
            padding: 10px;
            word-wrap: break-word;
            margin-left: 10px;
            display: flex;
            flex-direction: row;
            background-color: green;
        }

        /* 主人消息样式 */
        .host-message {
            background-color: #ccc;
            color: black;
            max-width: 30vw;
            border-radius: 10px;
            padding: 10px;
            word-wrap: break-word;
            margin-right: 10px;
            align-self: flex-end;
            display: flex;
            flex-direction: row;
        }
    </style>
</head>

<body>
    <div class="chat-container" id="chatContainer">
        <div class="host-message">欢迎来到聊天界面</div>
        <div class="guest-message">你好,主人!</div>
        <div class="host-message">今天过得怎么样?</div>
        <div class="guest-message">我也挺好的,有什么新鲜事吗?</div>
    </div>


</body>

</html>

在这里插入图片描述

遗留问题

每次增加了记录之后的,滚动条自动下滚行为。 下次再说。


//python 因为爱,所以学
print("Hello, Python!")

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

结论

单纯从聊天记录来说。我们离预期并不远。


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

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

相关文章

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中&#xff0c;经常需要为 3D 对象添加可交互的标签&#xff0c;以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示&#xff0c;如何在 Three.js 中为对象创建可点击的标签&#xff0c;点击标签可以展开详细信息&#xff0c;再次点击可以关…

JAVA集成工作流实际项目操作参考,springboot,vue,activiti,在线流程绘制,会签,退回,网关,低代码,

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻&#xff01;&#xff01;&#xff01; 结构体类型的声明 咱们在讲操作符那个章节中&#xff0c;对于结构体类型的声明进行了讲解&#xff0c;咱们先来回忆一下&#xff0c;为后面的讲解作准备…

堆排序,TopK问题|向上调整建堆|向下调整建堆(C)

堆排序 void HeapSort(int* a, int n) {HP hp;HeapInit(&hp);for (int i 0; i < n; i){HeapPush(&hp, a[i]);}int i 0;while (!HeapEmpty(&hp)){a[i] HeapTop(&hp);HeapPop(&hp);}HeapDestroy(&hp); }先初始化一个堆将数组中的数据一个一个顺序…

【Python大语言模型系列】在阿里云ECS服务器上部署dify大模型应用开发平台(完整教程)

这是我的第360篇原创文章。 一、阿里云ECS简介 云服务器( Elastic Compute Service ,简称ECS )是一-种简单高效、处理能力可弹性伸缩的计算服务&#xff0c;帮助您快速构建更稳定、安全的应用,提升运维效率,降低IT成本&#xff0c;使您更专注于核心业务创新。 这个活动需要满…

Vatee万腾平台:企业智能化生态的领航者

在科技日新月异的今天&#xff0c;企业的智能化转型已成为不可逆转的趋势。Vatee万腾平台&#xff0c;凭借其前瞻性的技术视野和不懈的创新精神&#xff0c;正逐步构建起一个以智能化为核心的新型商业生态&#xff0c;成为推动企业智能化升级的核心力量。 Vatee万腾平台深谙技…

软件设计之Maven(1)

软件设计之Maven(1) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版Maven教程&#xff08;高效入门maven&#xff0c;上手又快又稳&#xff09; 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Maven简介安装与环境配置Maven工程GA…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务实现…

【html网页制作】国庆节日主题网页制作含js轮播(5页面附效果源码)

HTMLCSS节日国庆主题网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、首页Page2、节日由来Page3、节日视频Page4、庆祝活动Page5、留言 &#x1f40b;三、网页架构与技术3.1 脑海构思…

# linux从入门到精通(二)

linux从入门到精通&#xff08;二&#xff09; 一、Linux系统的安装&#xff1a;新建VM虚拟机 1、Linux版本的选择 1&#xff09;版本选择&#xff1a;CentOS 6.5 【镜像一般都是xxx.iso文件】 2&#xff09;为什么不选择7.x版本&#xff1f; 6.x的各种系统操作模式是基础…

python绘制图像

柱状图 import os# 输入想要存储图像的路径 os.chdir(D:)import matplotlib.pyplot as plt import numpy as np # 改变绘图风格 import seaborn as snssns.set(color_codesTrue)cell [gen7, xgspon, 3081GB, vettel, totalplay, other] pvalue [21, 20, 18, 13, 7, 34]width…

​​XrayGLM原理与部署

接上一篇&#xff1a;VisualGLM-6B——原理与部署-CSDN博客 XrayGLM技术背景与原理 XrayGLM 是一种基于 VisualGLM-6B 微调开发的多模态医学影像诊断模型&#xff0c;专门用于处理医学影像&#xff08;如 X 光胸片&#xff09;的自动诊断和报告生成任务。该模型旨在为中文医学…

第8章_索引的创建与设计原则

1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 &#xff0c;索引可以…

医疗器械中的国产光耦合器浅析

光耦合器&#xff0c;也称为光隔离器&#xff0c;在确保医疗器械的安全性和性能方面发挥着关键作用。通过在系统的不同部分之间提供电气隔离&#xff0c;它们可以防止信号干扰、保护敏感元件并保护患者免受电击。近年来&#xff0c;国产光耦合器制造商一直在加紧生产可靠的高性…

时也命也!转念的力量(深度好文)——早读(逆天打工人爬取热门微信文章解读)

时也命也 引言Python 代码第一篇 洞见 转念的力量&#xff08;深度好文&#xff09;第二篇 意想不到的收入结尾 早上上交所宕机 很多股票都横成直线 我的股却跳了一下水 我怕出什么监管事故 跟着卖出去了 然后查了一下 发现是上交所被买爆了 我想了一下 服务器问题 那么能否事后…

OpenEuler配置本地yum源

0x00 服务器版本 将本地镜像传输至服务器 操作步骤如下 # 创建一个目录用于挂载光盘映像 mkdir /media/cdrom/# 将光盘映像挂载到指定目录 mount /kvm/openeuler.iso /media/cdrom/#进入Yum仓库配置目录 cd /etc/yum.repos.d/# 备份原有的 openEuler.repo 文件 mv openEuler.…

解读: 火山引擎自研vSwitch技术

最近看到一篇文章介绍火山云的网络vSwitch技术&#xff0c;虽然是2022年的比较老的介绍&#xff0c;但是对于我们看到vSwitch技术的发展还是有些参考的。下面就截取了当时火山vSwitch关心的几个问题&#xff0c;做了一下梳理。 背景 在云计算发展过程中&#xff0c;虚拟网络的…

国内光耦合器制造商如何满足特殊行业的需求

在航空航天、国防、电信等行业&#xff0c;对定制解决方案的需求正在增长。通用光耦合器可能并不总是适合这些专业领域的特定要求&#xff0c;因为这些领域必须满足独特的环境条件、尺寸限制和性能基准。国内光耦合器制造商一直在加紧努力&#xff0c;提供可定制的解决方案&…

从 0 到 1:互联网产品经理核心技能全解析

在互联网的浩瀚海洋中&#xff0c;产品经理如同领航员&#xff0c;决定着产品从无到有的走向和命运。从 0 到 1 打造一款互联网产品&#xff0c;需要产品经理具备多方面的核心技能。今天&#xff0c;我们就来详细解读这些关键能力。 一、洞察市场趋势 时刻关注行业动态 互联网…