uni-app怎么实现类似微信的聊天表情输入面板

煙雲

煙雲

2026-07-22

733人浏览

原创

最稳妥方案是textarea+absolute定位表情面板,父容器设relative和flex布局,并监听键盘高度变化做兼容处理。

uni-app怎么实现类似微信的聊天表情输入面板

直接用 textarea + 绝对定位表情面板,是最常见也最容易翻车的方案。真机上软键盘一弹,iOS 会把 textarea 顶上去,但如果你的表情面板用了 position: fixed,它就会脱离文档流、错位甚至消失;Android 则可能因 WebView 渲染差异,让面板被键盘盖住。

表情面板必须用 absolute,且父容器要设 relative + flex 自适应

fixed 是陷阱,absolute 才可控。关键在于父容器必须同时满足两个条件:

  • position: relative,给绝对定位提供参照
  • display: flex; flex-direction: column; 把输入框和表情面板包在一起,让它们高度联动
  • 输入区(含 textarea)设 flex-shrink: 0,表情区设 flex: 1 或固定高度,避免被压缩

这样键盘弹起时,整个父容器高度收缩,表情面板自然跟着上移,不会漂移。

监听键盘高度变化要用 uni.onKeyboardHeightChange,但 H5 要降级

这个 API 在 App 和小程序里能拿到实时键盘高度,在 H5 里完全不触发。别硬扛,得做兼容:

微信公众平台开发入门教程 中文WORD版
微信公众平台开发入门教程 中文WORD版

由于微信的大热,为了更好的方便使用微信的用户查询一些信息,这篇文章是入门级的微信公众平台开发教程,需要的朋友可以参考下 这篇入门教程将引导你完成如下任务: 创建百度云平台应用启用微信公众平台开发模式获取订阅、文字、图片、语音、视频消息回复文本、图文及音乐消息程序开发

下载
  • App / 小程序:直接监听 uni.onKeyboardHeightChange,更新 bottom
  • H5 端:监听 window.addEventListener('resize'),结合 document.activeElement === textareaRef 判断是否为键盘触发;或用 uni.getSystemInfo 预估键盘高度(iOS 一般 216px,Android 多为 300–400px)
  • 微信小程序真机测试务必加 safe-area-inset-bottom 样式,否则面板可能卡在安全区外

点不到表情图标?本质是事件穿透 + 焦点抢占

自定义表情按钮被点击无响应,90% 是因为事件冒泡到了 textarea,或者系统键盘抢了焦点:

  • 小程序:给表情图标外层 viewcatchtouchstart,彻底阻止冒泡
  • App 端(iOS/Android):先调用 uni.hideKeyboard(),再显示表情面板;千万别在 input@focus 回调里立刻 show 面板,会有约 100ms 延迟,建议用 setTimeout(() => showEmoji(), 100)
  • Vue 模板中写 @touchstart.stop 也能生效,但 catchtouchstart 更稳妥

几百个 emoji 卡顿?雪碧图 + computed 分页是刚需

本地加载几百个 PNG 表情图,首次点击面板卡顿不是因为图大,而是 image 组件批量渲染时每个都触发独立解码请求。H5 尤其明显:

  • 所有表情合并为一张雪碧图(sprite),用 background-image + background-position 定位,比单图快 3 倍以上
  • 表情数据存 JSON,但别直接 v-for 渲染全部;改用 computed 分页(如每页 20 个),配合唯一 :key
  • App 端慎用 base64 表情图——打包后体积暴涨且无法按需加载;H5 可用,但单图压缩到 ≤2KB

最易被忽略的一点:App 端软键盘收起后,表情面板不会自动隐藏,必须手动监听 uni.onKeyboardHeightChange 中高度归零的时机,再执行隐藏逻辑。

相关文章

微信app下载
微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

微信 uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1086

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2210

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2104

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2275

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

334

5

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

2003

6

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

144

21

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

6

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

1

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习