uniapp 实现微信聊天效果 阻止input失焦

前景:需要开发一个聊天系统,界面需要和微信一样,输完内容直接点发送内容,内容发送完成,但input不失焦,发送可以用input的@confirm事件执行,也可以是在别的dom上绑定发送。遇到两个难点

  1. 点发送input马上失焦
  2. input聚焦后,会把页面上顶,聊天内容就被顶走了,看不到了

DOM结构

  <view class="content"><view class="chat"><scroll-view scroll-y="true" class="scroll" :scroll-top="scrollTop" scroll-with-animation :show-scrollbar="true"><view class="chat-content" v-for="(item, index) in chatData" :key="index"><view class="chat-list" v-if="item.type == 2"><image class="c-l-head" @click="switchSpeakers(item)" :src="item.head" /><view class="c-l-center">{{ item.content }}</view></view><view class="chat-list-right" v-if="item.type == 1"><view class="c-l-center">{{ item.content }}</view><image class="c-l-head" @click="switchSpeakers(item)" :src="item.head" /></view><view class="caht-time" v-if="item.type == 3"><text class="c-t-time c-t-nobg">{{ item.content }}</text></view></view><view class="kongb" style="height: 14px; flex: 1"></view></scroll-view></view><view class="bottom"><view class="bottom-top"><view class="b-t-l"><image class="bottom-icon" src="/static/chat1.png" /></view><view class="b-t-c"><input class="uni-input" v-model="value" :style="{ marginBottom: isFoucs ? '15px' : '5px' }" confirm-type="send" @click="isChange = true" :focus="isFoucs"  @blur="blur" @focus="foucs" @confirm="confirm" placeholder="" /></view><view class="b-t-r"><image class="bottom-icon t-r-icon" src="/static/chat2.png" /><image class="bottom-icon" src="/static/chat3.png" /></view></view></view></view>

CSS

.content {width: 100%;height: 100%;position: absolute;display: flex;flex-direction: column;justify-content: flex-end;background: #ededed;.chat {flex: 1;background: #ededed;width: 100%;position: relative;.scroll {position: absolute;width: 100%;height: 100%;bottom: 0;left: 0;top: 0;display: flex;flex-direction: column;}}.bottom {width: 100%;background: rgba(245, 245, 245, 0.98);position: relative;display: flex;flex-direction: column;padding-bottom: calc(env(safe-area-inset-bottom) + 1rpx);.spokesman {width: 80upx;position: absolute;display: flex;flex-direction: column;justify-content: center;top: -70px;background: #fff;border: 2px solid #fff;left: 20upx;&::after {content: '';width: 16upx;height: 16upx;background: #fff;border-radius: 4upx;transform: rotate(45deg);position: absolute;left: 50%;bottom: -10upx;margin-left: -10upx;}.s-head {width: 80upx;height: 80upx;border-radius: 10upx;}.sp-text {color: #333;font-size: 11px;text-align: center;background: #fff;position: relative;z-index: 2;}}.bottom-top {width: 100%;display: flex;flex-direction: row;padding-top: 7px;border-top: 1px solid #dad7d3;box-sizing: border-box;align-items: flex-start;.b-t-c {flex: 1;.uni-input {height: 40px;flex: 1;padding: 5px 10px;font-size: 16px;background: #ffff;border-radius: 10upx;color: #000;margin-bottom: 5px;box-sizing: border-box;}}.b-t-l {padding: 0 20upx;display: flex;align-items: center;padding-top: 7px;}.b-t-r {padding: 0 20upx;display: flex;align-items: center;padding-top: 7px;.t-r-icon {margin-right: 25upx;}}.bottom-icon {width: 54rpx;height: 54rpx;}}.bottom-k {width: 100%;height: 24px;}}
}

这样写,然后就会上顶,还会输完以后马上失焦
在这里插入图片描述

解决失焦问题

属性名类型默认值说明平台差异说明备注
confirm-holdBooleanfalse点击键盘右下角按钮时是否保持键盘不收起App(3.3.7+)、H5 (3.3.7+)、微信小程序、支付宝小程序、百度小程序、QQ小程序、京东小程序使用input自带的发送按钮,添加这个属性后,发送完成后就不会失焦了

以上测试还有两个问题

  1. 聊天内容上顶
  2. input输入框位置不对

聊天内容上顶可以添加adjust-position这个属性

属性名类型默认值说明平台差异说明备注
adjust-positionBooleantrue键盘弹起时,是否自动上推页面App-Android(vue 页面 softinputMode 为 adjustResize 时无效,使用 x5 内核时无效)、微信小程序、百度小程序、QQ小程序、京东小程序~

添加后,不会上顶了,但是这样也把input给挡住了,无法看到input框了, 因为我们设置的.input样式是position:fixed; bottom:0;

在这里插入图片描述
找到问题解决问题,知道是fixed的bottom:0,导致input框被键盘遮住,那就获取这个键盘高度,并且,把.input的bottom:键盘高度就解决这个问题了

<!-- Dom结构 -->
<view class="bottom" :style="{bottom:bottomHeight}">
input框dom
<view>
  methods: {// 键盘弹出时执行keyboardheightchange(ev){const res_keyboard = uni.getSystemInfoSync();// 获取键盘高度 - 刘海屏手机下方的空白高度 = input的bottom高度const h = (ev.detail.height ? ev.detail.height - res_keyboard.safeAreaInsets.bottom : 0)this.bottomHeight = h + 'px';// 计算聊天内容主体高度this.computedHeight(h)},// 计算高度computedHeight(bottomHeight) {let that = this;that.screenHeight = '100vh';const query = uni.createSelectorQuery().in(this); //这样写就只会选择本页面组件的类名box的query.select('.chat').boundingClientRect(); // 聊天内容主体query.select('.bottom').boundingClientRect(); // input框入框主体query.exec(function(res) {if (bottomHeight) {// 键盘弹出that.screenHeight = res[0].height - res[1].height - bottomHeight + 'px';this.scrollTop += 100;} else {// 键盘收起 that.screenHeight = res[0].height - res[1].height + 'px';}});},}

最后,完成此功能
在这里插入图片描述

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

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

相关文章

开发者选项看html,手机怎么打开开发者选项?开发者模式开启方法

在手机的设置中隐藏着一个开发者选项&#xff0c;进入其中可以使用一些开发者要用到的设置&#xff0c;也可以通过设置进行硬件加速等操作&#xff0c;下面就教大家如何进入手机开发者模式。 1、经过对比&#xff0c;发现各品牌的手机打开开发者选项的方法都大同小异&#xff0…

35+大龄程序员从焦虑到收入飙升:我的搞钱副业分享。

37岁大龄程序员&#xff0c;一度觉得自己的职场生涯到头了。既没有晋升和加薪的机会&#xff0c;外面的公司要么接不住我的薪资&#xff0c;要么就是卷得不行&#xff0c;无法兼顾工作和家庭&#xff0c;感觉陷入了死局…… 好在我又重新振作起来&#xff0c;决定用副业和兼职填…

毕业论文html代码查重吗,毕业论文中的代码内容重复了怎么办? 毕业论文代码重复率高...

毕业论文中的代码内容重复了怎么办&#xff1f; 毕业论文代码重复率高 发布时间&#xff1a;2021-04-17 09:00:09 作者&#xff1a;知网小编 多理科的学生在写毕业论文的时候&#xff0c;可能会涉及到论文中代码的内容。例如&#xff0c;在计算机、设计等相关专业领域&#xff…

三星被曝出现漏洞,手机会随机发送照片给别人

随着手机在人们的生活中越来越密不可分&#xff0c;通过一部手机获得用户的隐私数据就成了很简单的事情。近期&#xff0c;部分搭载升降式镜头的手机&#xff0c;会在没有开启镜头的状况下弹出镜头&#xff0c;被用户认为有监控的嫌疑&#xff1b;此外三星部分机型也出现了漏洞…

继英伟达后,三星也遭勒索攻击,190GB数据和源代码遭泄密

3 月 6 日消息&#xff0c;被黑客Lapsus$ 团队攻击事件迎来了新的进展。 据显示统计&#xff0c;在这次网络攻击中&#xff0c;Lapsus$ 从英伟达获取到的数据超过 了1TB &#xff0c;包括原理图、驱动程序和固件细节。 还有 71355 名员工的电子邮件地址和 NTLM 密码等敏感工作…

如何获取铁粉

忽然发现我的铁粉从100变成了540&#xff0c;分享下我的经验&#xff0c;我觉得可能是我的机器人经常互动的问题&#xff0c;结合自己的看法和平台大佬的想法一些进行了梳理&#xff1a; 在当今社交媒体时代&#xff0c;吸引和保留铁粉&#xff08;忠实粉丝&#xff09;对于个…

【改BUG】项目遇到的奇葩bug

问题 今天&#xff0c;我的下级代理联系我说&#xff0c;我们的平台&#xff0c;应用服务批量导入后&#xff0c;用户密码含有“0”的都不显示&#xff0c;例如密码是“07121239”但是平台只显示“7121239”&#xff0c;今天做了下排查&#xff0c;本文仅记录一下今天排查的经…

跨越语言的艺术:Weblogic序列化漏洞与IIOP协议

0x01 概述 Weblogic 的序列化漏洞主要依赖于 T3 和 IIOP 协议&#xff0c;这两种协议在通信交互的过程中存在如跨语言、网络传输等方面的诸多问题&#xff0c;会给漏洞的检测和利用带来许多不便。在白帽汇安全研究院的理念中&#xff0c;漏洞检测和利用是一项需要创造性的工作…

chatgpt赋能python:Python波动方程介绍:掌握物理模型与实际应用

Python波动方程介绍&#xff1a;掌握物理模型与实际应用 在物理学中&#xff0c;波动方程是一种描述波动现象的数学模型。而在工程学中&#xff0c;波动方程也被广泛应用于声波、电磁波和弹性波等领域。Python是一种高效且易于学习的编程语言&#xff0c;因此被广泛用于模拟和…

【uniapp】实现买定离手小游戏

前言 最近玩了一个小游戏&#xff0c;感觉挺有意思&#xff0c;打算放进我的小程序【自动化小助手】里面&#xff0c;“三张押一张&#xff0c;专押花姑娘&#xff01;”&#xff0c;从三张卡牌&#xff0c;挑选一张&#xff0c;中奖后将奖励进行发放&#xff0c;并且创建下一…

如何写出高质量代码:特征、编程实践技巧和软件工程方法论

一、 前言 在当今的软件开发行业中&#xff0c;写出高质量代码是每个开发者都应该追求的目标。高质量代码不仅能提升我们自身的编程水平和工作效率&#xff0c;还能减少代码维护和管理的难度&#xff0c;为项目的长期发展奠定坚实的基础。然而&#xff0c;要写出高质量代码并不…

国考省考行测:细节理解,对错判断,要素查找,问什么,找什么,对比分析

国考省考行测&#xff1a;细节理解&#xff0c;对错判断&#xff0c;要素查找&#xff0c;问什么&#xff0c;找什么&#xff0c;对比分析 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要…

想去银行测试?那这套题目你必须要会

一、根据题目要求写出具体LINUX操作命令 1、分别写出一种查看主机IP地址、CPU使用率、内存使用率的命令。 ifconfig top 2、进入/wls/applogs目录&#xff0c;显示该目录下所有文件详细信息&#xff0c;并按照文件变更时间排序 cd /wls/applogs ls -lt 3、在后台运行目录下…

【银行测试】必看的四类题型:这可是最经典的一套题目了

目录&#xff1a;导读 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 四、测试案例设计题 金三银四面试面对大厂面试官提问&#xff0c;如何回答&#xff1a;花3天背完这100道软件测试面试题&#xff01;银行测试的offer还不是手…

政考网:公务员考试拿不到高分,因为你的刷题姿势不对

众所周知&#xff0c;公务员考试竞争是十分激烈的&#xff0c;如果你想成功上岸&#xff0c;首先就要拿到一个比较优秀的笔试分值&#xff0c;这样你才有进行到面试的资格。但是又有很多同学经常说&#xff0c;自己也付出了不少的努力&#xff0c;为什么却拿不到高分呢。关于这…

国外国内都躲不过的面试题,到底怎么答才得分?

大家都知道的是算法面试占比高&#xff0c;可现在系统设计面试也避无可避&#xff01; 有人问&#xff1a;不是SDE2才问系统设计&#xff0c;SDE1只考察OOD吗&#xff1f; 往年也许如此&#xff0c;但今年面试的小伙伴反馈&#xff1a;亚麻分别在三、四轮里出现OOD和系统设计…

长见识!居然还有程序员考公指南这种东西?

整理 | 王晓曼 出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09; 最近&#xff0c;拼多多事件的发酵再次把互联网打工人的996推到了风口浪尖。 虽然并不是每一个猝死事件都能与“过劳”建立直接联系&#xff0c;但互联网行业超负荷加班处理Bug是家常便饭&am…

考研复试之考前准备(上)

文章目录 1. 写在前面的话2. 如何准备复试2.1 和同专业的师兄师姐沟通(跨校)2.2 和目标导师联系1. 写在前面的话 今年的考研初试刚结束,有人欢喜有人忧。欢喜者可能因为初试顺利而沾沾自喜,忧愁者往往因为初试不佳而沮丧失望,导致最终的结果是一致的,那就是迟迟没有进入到复…

【深圳大学】考研初试复试资料分享

给同学们送福利啦~ 提供给同学们计算机/软件工程等相关专业的各种学校的初试复试资料集合。 资料一般包含初试真题&#xff0c;往年学长学姐考研经验&#xff0c;通知&#xff0c;复试资料等等。 这次分享的是 深圳大学 的考研资料~ https://pan.baidu.com/s/10jSyL32Gh-C_5Wf4…

微信机器人终端1.0未来的设想就是做成telegram一样强大的机器人群体集控终端

Bot console 是本人最近研发的一款项目&#xff0c;目前存放在github中 Bot console未来的设想就是做成telegram一样强大的机器人群体集控终端 在自定义机器人和脚本这块可以说是自由度非常高&#xff0c;当然对编程技术也有一定要求&#xff0c;有兴趣的可以一起开发和讨论&am…