uniapp实现聊天消息触,vue3和vue2实现聊天消息触底 scrollTop ,scrollHeight Pc端H5端都适用

uniapp触底SDN链接如下(本人的另一篇博客)

uniapp聊天时时触底链接
Pc端在这里插入图片描述
模拟手机端H5
在这里插入图片描述

vue3写法

<template>
  <div>
    <!-- 聊天窗体 -->
    <div class="test" id="gundong">
      <div class="text" v-for="p in chat">
        {{ p.info }}
      </div>
    </div>
    <div style="display: flex">
      <!-- 输入窗体 -->
      <el-input v-model="text"></el-input>
      <!-- 确认按钮 -->
      <el-button @click="take">发送</el-button>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref, nextTick, onMounted, watch, HtmlHTMLAttributes } from "vue";
import { storeToRefs } from "pinia";
import { userCeshi } from "@/pinia/module/user-ceshi";
import { userInfoCeshi } from "@/pinia/module/userInfo-ceshi";
const text = ref<any>("");
const chat = ref<any[]>([
  { info: "---点赞关注---" },
  { info: "---点赞关注---" },
  { info: "---点赞关注---" },
  { info: "---点赞关注---" },
  { info: "---点赞关注---" },
]);
const take = () => {
  text.value != "" && chat.value.push({ info: ` ${text.value}` });
  text.value = "";
  // 核心代码
  // 滚动
  nextTick(() => {
    let msg = document.getElementById("gundong"); // 获取对象
    //     scrollTop是滚动条的当前高度。默认是0
    // scrollHeight是滚动条的整体高度
    // 只要动态修改滚动条到顶部的距离等于div的高度,那么久实现滚动条定位在底部了。
    (msg as any).scrollTop = (msg as any).scrollHeight; // 滚动高度
  });
};
take();
</script>

<style scoped lang="less">
.test {
  border: 1px solid red;
  padding: 10px;
  overflow: hidden;
  box-sizing: border-box;
  width: 100%;
  height: 300px;
  overflow: auto;
  .text {
    margin-left: auto;
    width: 200px;
    height: auto;
    background-color: black;
    border-radius: 10px;
    color: #fff;
    margin-top: 10px;
  }
}
</style>

vue2写法

 <template>
  <div>
    <!-- 聊天窗体 -->
    <div class="test" id="gundong">
      <div class="text" v-for="p in chat">
        {{ p.info }}
      </div>
    </div>
    <div style="display: flex">
      <!-- 输入窗体 -->
      <el-input v-model="text"></el-input>
      <!-- 确认按钮 -->
      <el-button type="primary" @click="take">发送</el-button>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      text: "",
      chat: [
        { info: "---点赞关注---" },
        { info: "---点赞关注---" },
        { info: "---点赞关注---" },
        { info: "---点赞关注---" },
        { info: "---点赞关注---" },
      ],
    };
  },
  methods: {
    task() {
      // 这段代码不好使就使用下面的if(){}代码
      this.text != "" && this.chat.push({ info: ` ${text.value}` });
      this.text = "";
      this.$nextTick(() => {
        let msg = document.getElementById("gundong"); // 获取对象
        //     scrollTop是滚动条的当前高度。默认是0
        // scrollHeight是滚动条的整体高度
        // 只要动态修改滚动条到顶部的距离等于div的高度,那么久实现滚动条定位在底部了。
        msg.scrollTop = msg.scrollHeight; // 滚动高度
      });

      // if (this.text.length > 0) {
      //   this.chat.push({ info: ` ${text.value}` });
      //   this.text = "";
      //   // 核心代码
      //   // 滚动
      //   this.$nextTick(() => {
      //     let msg = document.getElementById("gundong"); // 获取对象

      //     msg.scrollTop = msg.scrollHeight; // 滚动高度
      //   });
      // }
    },
  },
};
</script>

<style scoped lang="less">
.test {
  border: 1px solid red;
  padding: 10px;
  overflow: hidden;
  box-sizing: border-box;
  width: 100%;
  height: 300px;
  overflow: auto;
  .text {
    margin-left: auto;
    width: 200px;
    height: auto;
    background-color: black;
    border-radius: 10px;
    color: #fff;
    margin-top: 10px;
  }
}
</style>

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

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

相关文章

2023年上半年总结

2023年上半年总结 引言问答CSDN 竞赛技能树博客原力值粉丝数贡献墙个人能力图新星计划总结 引言 老顾是一个懒癌晚期患者&#xff0c;通常情况下&#xff0c;是一条不折不扣的咸鱼&#xff0c;在工作中&#xff0c;也大多数时间都用来摸鱼了。 摸鱼时间太长&#xff0c;也就有…

RabbitMQ的集群

新建一个虚拟机,重新安装一个RabbitMQ,不会安装的可以看下面的连接: 在Linux中安装RabbitMQ_流殇꧂的博客-CSDN博客 1.修改/etc/hosts映射文件,两台虚拟机都需要修改 vim /etc/hosts 127.0.0.1 node1 localhost.localdomain localhost4 localhost4.localdomain4 ::1 node1 loca…

SpringBoot + Kotlin 中使用 GRPC 进行服务通信

示例项目见&#xff1a;kotlin-grpc 一、导入依赖&#xff1a; import com.google.protobuf.gradle.* plugins { id("org.springframework.boot") version "2.3.1.RELEASE" id("io.spring.dependency-management") version "1.0.9.REL…

idea连接远程MySQL数据库

填写URL&#xff0c;以mysql为例 格式 jdbc:mysql://ip地址:端口号/数据库名 jdbc:mysql://127.0.0.1:3306/ldentification _Information

软件测试基础知识

软件测试的生命周期 软件测试的生命周期和软件的生命周期是不一样的&#xff0c;软件包括需求分析和规划&#xff0c;设计和编码&#xff0c;测试和验证&#xff0c;部署和维护&#xff0c;退役和回收等等&#xff0c;而软件测试的生命周期则是需求分析-测试计划-测试设计&…

对 Jenkins+ANT+Jmeter 接口测试的实践

目录 1、前言 2、框架与数据准备 3、脚本设计 4、整理测试报告 1、前言 JenkinsANTJMeter是一种常见的接口测试实践方案&#xff0c;可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具&#xff0c;ANT是一个构建工具&#xff0c;而JMeter是一个功能强大…

maven配置java outofmemory选项

在maven之中选择Add VM options&#xff0c;这样命令就多出来一个关于VM options配置的属性&#xff0c;此时就可以输入对于VM的设置

Ubuntu 放弃了战斗向微软投降

导读这几天看到 Ubuntu 放弃 Unity 和 Mir 开发&#xff0c;转向 Gnome 作为默认桌面环境的新闻&#xff0c;作为一个Linux十几年的老兵和Linux桌面的开发者&#xff0c;内心颇感良多。Ubuntu 做为全世界Linux界的桌面先驱者和创新者&#xff0c;突然宣布放弃自己多年开发的Uni…

jenkins实现easyswoole 持续集成/持续部署

jenkins环境jenkins需要使用root用户启动可通过修改 vim /etc/sysconfig/jenkins改为root,也可直接命令行root启动新增流水线项目安装远程构建插件Generic Webhook Trigger勾选触发远程构建保存之后,访问 /generic-webhook-trigger/invoke?tokeneasyswoole-test,即可自动bui…

【网络】协议的定制与Json序列化和反序列化

文章目录 应用层初识TCP协议通讯流程定制协议再谈协议网络版本计算器Protocal.hppCalServerCalClient Json的安装 应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 初识TCP协议通讯流程 建立链接和断开链接 基于TCP协议&#xff0c…

nginx相关

1、nginx无默认配置文件 参考文章&#xff1a;nginx配置失败&#xff0c;卸载后重装无 nginx.conf文件_haojuntu的博客-CSDN博客 2、nginx更改服务器的端口号 参考文章&#xff1a;https://www.cnblogs.com/chaosfe/p/16123585.html#:~:text%E6%88%91%E4%BB%AC%E6%9F%A5%E7%…

Java----使用eureka进行注册连接(微服务简单实现)

当采用微服务架构时&#xff0c;各个业务流程被逐一分解&#xff0c;虽说是分解&#xff0c;但还是要进行连接的&#xff0c;最简单的就是使用http请求&#xff0c;将他们联系起来&#xff0c;通过给容器注入restTemplate&#xff0c;然后使用内置的方法进行请求&#xff0c;但…

Java虚拟机(JVM)介绍

JVM是什么 JVM是Java Virtual Machine的缩写。它是一种基于计算设备的规范&#xff0c;是一台虚拟机&#xff0c;即虚构的计算机。 JVM屏蔽了具体操作系统平台的信息&#xff08;显然&#xff0c;就像是我们在电脑上开了个虚拟机一样&#xff09;&#xff0c;当然&#xff0c;J…

支付宝接入

支付宝接入 python-alipay-sdk pycryptodome一、电脑网站支付 1.1 获取支付宝密钥 沙箱网址 1.APPID 2.应用私钥 3.支付宝公钥1.2 存放密钥 在与 settings.py 的同级目录下创建 pem 文件夹pem 文件夹下创建 app_private_key.pem 和 alipay_public_key.pem app_private_key…

pdf文档加水印怎么弄?用这款软件很方便

在工作中&#xff0c;我们经常需要将PDF文件发送给他人&#xff0c;但无法保证文件内容不被窃取&#xff0c;因此需要添加水印来保证文件的安全性。如果你不知道如何给PDF文件添加水印&#xff0c;以下两款软件可以帮助你轻松实现&#xff0c;一起来看看吧&#xff01; 方法一&…

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域&#x…

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例)

Python实现Excel文件拷贝图片到另一个的Excel文件&#xff08;保持原有图片比例&#xff09; 1、前言1.1 成功拷贝但是比例错误1.2 直接报错 2、解决办法3、号外 1、前言 今天朋友给我一个需求&#xff0c;需要把xlsx文件中的图片拷贝到另一个xlsx中&#xff0c;但是试过网上比…

[Lesson 01] TiDB数据库架构概述

目录 一 章节目标 二 TiDB 体系结构 1 TiDB Server 2.1 TiKV 2.2 TiFlash 3 PD 参考 一 章节目标 理解TiDB数据库整体架构了解TiDB Server TiKV tiFlash 和 PD的主要功能 二 TiDB 体系结构 了解这些体系结构是如何实现TiDB的核心功能的 1 TiDB Server TiDB Serve…

若依官方前端手册 小笔记

提供确认窗体信息 this.$modal.confirm(确认信息).then(function() {... }).then(() > {... }).catch(() > {}); 提供遮罩层信息 // 打开遮罩层 this.$modal.loading("正在导出数据&#xff0c;请稍后...");// 关闭遮罩层 this.$modal.closeLoading(); 验证…

pythonocc进阶学习:faces的inner wire与outer wire

总目录 >> PythonOCC入门进阶到实战(目前已更新入门篇、基础篇和进阶篇) 我们在这篇文章中绘制了带有holes的面&#xff0c; 本篇是在读取到外部文件如brep&#xff0c;igs&#xff0c;stp后获取面的性质&#xff0c;寻找面中的wires的正向与逆向 只显示外wire from O…