【uni-app】uni-app实现聊天页面功能(小程序)——布局篇

article/2025/9/22 6:48:16

文章目录

    • 前言
    • 划分区域
    • 问题
      • 内容溢出
      • 关于调试聊天框
    • 代码实现


前言

在工作中使用uni-app参与开发一个小程序,其中要写一个简单的聊天页面,虽然功能不多(只有一个发送文字的功能),但是其中的细节比较多,也踩过很多坑,特此记录下来。要实现的页面如图所示,该篇主要讲讲如何布局(参考了很多文章之后根据页面需求进行一个整合)。
在这里插入图片描述

划分区域

先划分大区域,主要包含两个(顶部导航栏用的小程序自带的,所以就没有自己写,后续有需求可能会自定义导航栏)聊天内容区底部发送框

在这里插入图片描述

其中因为要实现发送内容页面会自动滚到最底部,所以聊天内容区在布局上是采用了scroll-view,必须要给它设置一个基础的高度(这里设置为屏幕的高度),而聊天消息列表的高度是根据内容来撑开。

注意!底部聊天框是采用固定定位固定在页面的底部,它不遵循标准流,当聊天内容充满整个屏幕时,最底部的消息会被聊天框遮挡,为了避免这种情况发生,需要在聊天框外再套一层有固定高度的view来占位

问题

内容溢出

而实际测试时还发现了一个问题:连续的数字会溢出内容框!
在这里插入图片描述

因为连续的数字被浏览器误认为是英文单词,而英文单词在默认情况下是不会分开换行的,解决方案是在css内容框中加入如下代码(二选一即可):

//写法一
word-wrap: break-word;//写法二
word-break: break-all;

这样就解决了!

在这里插入图片描述

关于调试聊天框

小程序模拟器和真机上在聊天框中会略微有点差别!!!
(我设置了padding,模拟器上文字是贴着,但真机上文字居中)

模拟器:
在这里插入图片描述
真机:
在这里插入图片描述

代码实现

下面是整个页面的完整代码(已更新):

<template><view class="chat"><scroll-view  :style="{height: `${windowHeight}rpx`}"id="scrollview"scroll-y="true" :scroll-top="scrollTop":scroll-with-animation="true"class="scroll-view"><!-- 聊天主体 --><view id="msglistview" class="chat-body"><!-- 聊天记录 --><view v-for="(item,index) in msgList" :key="index"><!-- 自己发的消息 --><view class="item self" v-if="item.userContent != ''" ><!-- 文字内容 --><view class="content right">{{item.userContent}}</view><!-- 头像 --><view class="avatar"></view></view><!-- 机器人发的消息 --><view class="item Ai" v-if="item.botContent != ''"><!-- 头像 -->     <view class="avatar"></view><!-- 文字内容 --><view class="content left">{{item.botContent}}</view></view></view></view></scroll-view><!-- 底部消息发送栏 --><!-- 用来占位,防止聊天消息被发送框遮挡 --><view class="chat-bottom"><view class="send-msg"><view class="uni-textarea"><textarea v-model="chatMsg"maxlength="300":show-confirm-bar="false"auto-height></textarea></view><button @click="handleSend" class="send-btn">发送</button></view></view></view>
</template>
<script>export default {data() {return {//滚动距离scrollTop: 0,userId:'',//发送的消息chatMsg:"",msgList:[{botContent: "hello,请问我有什么可以帮助你的吗?",recordId: 0,titleId: 0,userContent: "",userId: 0},{botContent: "",recordId: 0,titleId: 0,userContent: "你好呀我想问你一件事",userId: 0},]	}},computed: {windowHeight() {return this.rpxTopx(uni.getSystemInfoSync().windowHeight)}},methods: {// px转换成rpxrpxTopx(px){let deviceWidth = wx.getSystemInfoSync().windowWidthlet rpx = ( 750 / deviceWidth ) * Number(px)return Math.floor(rpx)},// 发送消息handleSend() {//如果消息不为空if(!this.chatMsg||!/^\s+$/.test(this.chatMsg)){let obj = {botContent: "",recordId: 0,titleId: 0,userContent: this.chatMsg,userId: 0}this.msgList.push(obj);this.chatMsg = '';}else {this.$modal.showToast('不能发送空白消息')}},}}
</script>
<style lang="scss" scoped>$chatContentbgc: #C2DCFF;$sendBtnbgc: #4F7DF5;view,button,text,input,textarea {margin: 0;padding: 0;box-sizing: border-box;}/* 聊天消息 */.chat {.scroll-view {::-webkit-scrollbar {display: none;width: 0 !important;height: 0 !important;-webkit-appearance: none;background: transparent;color: transparent;}// background-color: orange;background-color: #F6F6F6;.chat-body {display: flex;flex-direction: column;padding-top: 23rpx;// background-color:skyblue;.self {justify-content: flex-end;}.item {display: flex;padding: 23rpx 30rpx;// background-color: greenyellow;.right {background-color: $chatContentbgc;}.left {background-color: #FFFFFF;}// 聊天消息的三角形.right::after {position: absolute;display: inline-block;content: '';width: 0;height: 0;left: 100%;top: 10px;border: 12rpx solid transparent;border-left: 12rpx solid $chatContentbgc;}.left::after {position: absolute;display: inline-block;content: '';width: 0;height: 0;top: 10px;right: 100%;border: 12rpx solid transparent;border-right: 12rpx solid #FFFFFF;}.content {position: relative;max-width: 486rpx;border-radius: 8rpx;word-wrap: break-word;padding: 24rpx 24rpx;margin: 0 24rpx;border-radius: 5px;font-size: 32rpx;font-family: PingFang SC;font-weight: 500;color: #333333;line-height: 42rpx;}.avatar {display: flex;justify-content: center;width: 78rpx;height: 78rpx;background: $sendBtnbgc;border-radius: 8rpx;overflow: hidden;image {align-self: center;}}}}}/* 底部聊天发送栏 */.chat-bottom {width: 100%;height: 177rpx;background: #F4F5F7;.send-msg {display: flex;align-items: flex-end;padding: 16rpx 30rpx;width: 100%;min-height: 177rpx;position: fixed;bottom: 0;background: #EDEDED;}.uni-textarea {padding-bottom: 70rpx;textarea {width: 537rpx;min-height: 75rpx;max-height: 500rpx;background: #FFFFFF;border-radius: 8rpx;font-size: 32rpx;font-family: PingFang SC;color: #333333;line-height: 43rpx;padding: 5rpx 8rpx;}}.send-btn {display: flex;align-items: center;justify-content: center;margin-bottom: 70rpx;margin-left: 25rpx;width: 128rpx;height: 75rpx;background: $sendBtnbgc;border-radius: 8rpx;font-size: 28rpx;font-family: PingFang SC;font-weight: 500;color: #FFFFFF;line-height: 28rpx;}}}
</style>

具体功能实现将放在下篇(可能一篇讲不完),有任何问题可以评论留言~


http://chatgpt.dhexx.cn/article/oT6CQqEf.shtml

相关文章

如何搜索WhatsApp聊天消息

Trying to find a specific message in your huge WhatsApp chat log? There are two ways to search, so you can find what you’re looking for quickly. 试图在庞大的WhatsApp聊天日志中查找特定消息&#xff1f; 有两种搜索方式&#xff0c;因此您可以快速找到要查找的内…

【uni-app】uni-app实现聊天页面功能——功能篇(下)

目录 前言一、聊天框随键盘抬起思路代码实现 二、聊天消息列表随着聊天框的增高而滚动到最底部思路 三、问题完整代码实现总结 前言 前面我有写关于如何进行聊天页面布局和实现聊天消息滚动到最底部的文章。 【uni-app】uni-app实现聊天页面功能——功能篇&#xff08;上&…

如何将 WhatsApp 聊天添加到您的网站

WhatsApp是全球最受欢迎的消息传递应用程序。平台上有超过 2 亿活跃用户与朋友、家人和企业进行交流。对于企业而言&#xff0c;WhatsApp 是与客户进行个人、可访问和非正式对话的理想渠道。 要将 WhatsApp 作为渠道引入您的客户旅程&#xff0c;第一步是将 WhatsApp 聊天按钮…

uni-app 即时聊天

项目介绍 前段时间在B站看到了有一个UP主在讲uni-app即时聊天的项目&#xff08;逸刻时光&#xff09;&#xff0c;在看了这个视频之后&#xff0c;感觉还是挺有兴趣的&#xff0c;所以在看他的讲解视频之后&#xff0c;就自己动手写了这个即时聊天项目&#xff0c;在样式方面…

uniapp+nvue实现仿微信App聊天应用 —— 成功实现好友聊天+语音视频通话功能

基于uniapp nvue实现的uniapp仿微信App聊天应用 txim 实例项目&#xff0c;实现了以下功能。 1: 聊天会话管理 2: 好友列表 3: 文字、语音、视频、表情、位置等聊天消息收发 4: 一对一语音视频在线通话 技术实现 开发环境&#xff1a;HbuilderX nodejs技术框架&#xff…

WhatsApp聊天记录迁移新手机,备份如何找回和删除?

当外贸人更换手机时&#xff0c;面临的第一大问题就是WhatsApp数据迁移的问题。 因为WhatsApp的聊天记录、联系人、图片、视频等&#xff0c;都是与客户息息相关的数据&#xff0c;对外贸人来讲都非常重要&#xff0c;所以一定要确保在换手机过程中不丢失WhatsApp的任何资料。…

[uni-app]聊天App实例

项目简介 基于uni-appvuevuexuniPopswiper等技术开发的仿微信聊天室uniapp-chatroom项目&#xff0c;类似vue及小程序api语法使开发更加方便&#xff0c;实现了发送图文消息、表情(gif动图)&#xff0c;图片预览、地图位置、红包、仿微信朋友圈等功能 效果图 在H5 / 小程序 …

开发社交聊天APP需要注意什么?如何快速开发聊天功能

随着互联网的发展&#xff0c;人们的沟通方式也在悄悄发生变化&#xff0c;由原来的面对面沟通&#xff0c;发展为网上沟通。让大家日常生活的通讯越来越方便了&#xff0c;各种APP层出不穷。那么&#xff0c;想开发一款社交聊天并进行运营&#xff0c;需要注意哪些方面&#x…

比较好用的聊天交友软件?最受年轻人欢迎的APP在这

现在都有哪些比较火,比较好用的聊天交友软件?移动社交是一件越来越普遍的事情&#xff0c;人们可以通过互联网&#xff0c;在社交软件上认识众多的一样的有趣人群&#xff0c;在国内都有哪些**的交友app哪个好??在中国在中国最受年轻人欢迎的APP又有哪些呢? 微信 微信可以…

程序员的时钟/原生抖音罗盘时钟代码分享/ 罗盘文字时钟软件非常火 /文字时钟

原生抖音罗盘时钟代码分享 罗盘文字时钟软件非常火 文字时钟 本站给大家分享这款就是通过原生j来s实现的文字时钟源码&#xff0c;有喜欢的朋友可以下载哦&#xff0c;无需安装&#xff0c;上传访问即可使用 简单实现&#xff1a;https://sucaiip.com/time-302.html

Android实现模拟时钟(简单+漂亮)--时针、分针、秒针

前言 前不久在网上看见Android实现的模拟时钟&#xff0c;感觉十分有意思&#xff0c;这里是地址&#xff1a; http://www.eoeandroid.com/forum.php?modviewthread&tid58324可惜的是这种方式没有 秒表。笔者突然对其有了兴趣&#xff0c;也想去实现以下自己的模拟时钟。折…

网页电子时钟

如图就是一个简易的网页电子时钟&#xff0c;利用Javascript和 html和 css就可以制作 <div class"wrapper"><div class"time-box"><div class"hour"></div><div class"sec"></div></div>&…

时钟啊时钟

效果图 JS /*** color --color 父级定义颜色 css直接使用变量*/ import { useState, useEffect } from react; import styles from ./style.less const index () > {const [time, setTime] useState({hours: 00,minutes: 00,seconds: 00})useEffect(() >{countDown() …

模拟钟表的手机软件_手机时钟软件推荐

下载 生活服务|47.3MB 更新时间&#xff1a;2019-04-04 12:04:18 评分&#xff1a;7 概要&#xff1a;抖音文字云时钟app是一款异常火爆的数字时钟软件&#xff0c;该软件在抖音上已经被众多小伙伴种草了&#xff0c;它拥有非常炫酷的背景&#xff0c;设置安装起来也非常简便&a…

抖音文字时钟壁纸html,抖音文字时钟

抖音文字时钟是一款为最近非常火的珍惜时间打造的钟表&#xff0c;有记录时间的功能也有很强大的警示作用&#xff0c;告诉我们时间的重要性&#xff0c;它有很多的模式可以调节使用&#xff0c;展现出自己喜欢的需要的时钟模式来&#xff0c;有需要的用户们就来这里下载吧。 温…

实现时钟特效

需求&#xff1a; 显示年、月、日、星期和二十四进制的时钟特效&#xff01; 代码&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>时钟特效</title><style> body{backgrou…

超级实用的动态时钟。

绘制时钟 时钟动态效果的实现基于canvas画布的重绘&#xff0c;也就是说每秒都要在canvas画布上重新绘画一遍图形&#xff0c;在配合定时器即可实现动态效果。而实现此时钟主要有两个步骤&#xff0c;1是表盘的绘制&#xff0c;2是指针的绘制。 绘制时钟表盘 时钟表盘的刻度…

教你制作 简易罗盘动态时钟 网页文件

简易罗盘动态时钟&#xff08;含html文件和源码&#xff09; 快来获取 首先给大家展示成品截图 首选展示index.txt代码 <动态罗盘时钟> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"v…

用前端代码编写一个动态的罗盘时钟

用前端代码编写一个动态的罗盘时钟 前言一、代码如下1.index2.js3.css 页面效果 前言 今天给大家分享一个罗盘时钟的前端代码&#xff0c;喜欢的小伙伴帮忙点赞一下噢&#xff01; 一、代码如下 1.index <!DOCTYPE html> <html lang"en"> <head>…

android时钟字体,文字时钟下载-文字时钟 安卓版v1.6.1-PC6安卓网

文字时钟屏保app是一款功能齐全又实用的时钟显示软件&#xff0c;文字时钟屏保app主界面是一个自带时间、日期、天气的LED数字时钟和模拟时钟&#xff0c;全屏显示翻页时钟&#xff0c;酷炫美观又实用。这款文字时钟屏保app可以一直保持显示状态。 软件介绍 文字时钟屏保app是一…