艺灵设计

全部文章
×

微信小程序从入坑到放弃二十二:完美兼容安卓和ios手机的底部评论框

作者:艺灵设计 - 来源:http://www.yilingsj.com - 发布时间:2020-04-10 22:42:10 - 阅: - 评:0 - 积分:0

摘要:不管是在普通的H5页面还是在微信小程序中,底部输入框一直是一大难题,因为键盘会在某些情况下遮挡信输入框一部分!值得庆幸的是:在微信小程序中,我们可以通过监听bindfocus来获取键盘的高度,动态算出输入框距离屏幕顶部的距离......

一、需求

年前,公司的小程序中新增了一个用户评论的需求,效果图长这个样子。如图:小程序中有一个写评论的需求.png小程序中有一个写评论的需求

二、黑暗和光明

搞过底部输入框的看官都知道,这玩意儿真的是太坑了!在普通的移动端H5页面中,想监听软键盘高度?想监听页面的resize变化?想法总是美好的,但实现起来,哼,别做梦了!特别是在苹果手机上,底部的输入框时不时会被系统软键盘遮挡!即使不被系统键盘挡住,在某些低版本的微信上,可能还会出现键盘不见了,输入框在半空中的尴尬场景(经测试跟css布局也有关系)!关键是,前端目前的解决方案也挺鸡肋的!比较幸运的是:微信小程序中提供了监听软键盘高度的bindfocus方法,这样一来,我们就离成功更进了一步。

下面,艺灵就为看官们复现上述的demo,最终演示的demo效果如图:演示demo在微信开发者工具中的效果.png演示demo微信开发者工具中的效果当然了,如果只在微信开发者工具中截图是没有说服力的,必须要在苹果手机上跑代码才行。特意录制了一个小视频,戳下方图片即可播放。底部评论框在苹果6手机中的效果.mp4底部评论框在苹果6手机中的效果(友情提示:点击上面的图片即可播放视频)

怎么样,看上面的演示效果还不错吧!下面开始步入今天的主题,看官们准备好了吗?

三、手写demo

3.1、需求分析

写代码前需要做下需求分析,通过在项目中的使用场景来看,这个评论框会出现在多处。比如:资讯下面、名片下面、商品下面...... 所以,我们可以把评论框封装成一个通用的组件component,这样无论是修改还是调用都比较方便。

再进一步分析,默认展示的底部输入框在不同的地方样式不一样,但弹层中的输入框是一致的。所以,将弹层和输入框封装成一个组件是最好的选择。至于是资讯的评论还是商品的评论还是名片的评论,接口调用全在外层,组件内只管好自身,数据往外传即可。

好了,需求分析完毕,下面来看下我们的目录结构吧!

  1. components /* 组件目录 */
  2.   textarea-fixed-bottom /* 固定在底部的输入框组件目录 */
  3.     index.js /* js文件,交互及逻辑都在这里(可以当成.js来理解) */
  4.     index.json /* json文件,可配置标题、引用组件等 */
  5.     index.wxml /* wxml模板文件,前台展示(可以当成.html来理解) */
  6.     index.wxss /* wxss样式文件(可以当成.css来理解) */
  7. pages /* pages目录 */
  8.   index /* 首页目录 */
  9.     index.js /* js文件 */
  10.     index.json /* json文件 */
  11.     index.wxml /* wxml模板文件 */
  12.     index.wxss /* wxss样式文件 */

3.2、组件封装

刚刚已经把目录的结构定了,现在再来仔细的分析下这个弹层页面的交互吧。弹层页面的内容有:半透明背景层、输入框、提交按钮、字数这四样东西。wxss样式比较好实现但也有坑!最难搞的还是.js,下面继续分析下有哪些js事件。
bindfocus:输入框获取焦点,同时可监听软键盘高度;
bindblur:输入框失去焦点,用于关闭弹层;
bindinput:监听输入框,用于时时显示字数;
bindconfirm:监听键盘上的完成按钮(此demo中禁用完成按钮的显示);
bindkeyboardheightchange:监听键盘高度发生变化(此demo中也未使用)
输入框相关的js事件就没有了,但并不表示以上事件就能满足需求!比如:点击半透明背景时需要关闭弹层,点击非输入框区域时也需要关闭弹层,还有滑动屏幕时也需要关闭弹层[:笑哭]。此时,我们还需要再添加两个js事件,分别是:
catchtap:绑定并阻止事件冒泡;
catchtouchmove:阻止穿透滚动;
现在基本上差不多了,但没有完。我们还需要检测用户使用的是安卓机还是苹果机,毕竟官方的textarea是有个巨坑的!参见2018年的一篇文章《 微信小程序从入坑到放弃之坑八:textarea在苹果手机中的大Bug》,由于文章写的比较早,不够详细,待明天再补发一篇。检测用户的机型可以使用 wx.getSystemInfo这个API,然后判断platform的值即可。 由于js代码比较多,此处就不一一粘贴了,完整的及注释都在源码里面,此处就略过。

接下来看下最终的wxml模板页面吧。

  1. <view class="popup-evaluation__bg \{\{info.isShow === true ? 'is__show' : ''\}\}" catchtap="handleClose" catchtouchmove="handleEvaluationtouchmove">
  2.   <view class="popup-evaluation-wrap" catchtap="handleEvaluationCatchTap" style="top:\{\{focusTop\}\};height:\{\{domHeight\}\}">
  3.     <view class="popup-evaluation__body">
  4.       <textarea name="evaluation" class="popup-evaluation__textatrea \{\{platform === 'ios' ? 'textatrea_ios_bug' : ''\}\}" maxlength="\{\{maxLength\}\}" focus="\{\{info.isShow\}\}" bindfocus="handleEvaluationFocus" bindinput="handleEvaluationInput" bindconfirm="handleEvaluationConfirm" bindblur="handleEvaluationBlur" show-confirm-bar="\{\{false\}\}" adjust-position="\{\{false\}\}" value="\{\{commentsText\}\}" fixed="\{\{true\}\}"> </textarea>
  5.     </view>
  6.     <view class="popup-evaluation__foot">
  7.     <view class="popup-evaluation__length">\{\{commentsText.length\}\} / \{\{maxLength\}\}</view>
  8.     <button class="popup-evaluation__button button_theme_primary" type="primary" bindtap="handleEvaluationRelease">发表评论</button>
  9.     </view>
  10.   </view>
  11. </view>

友情提示:上面代码中的\反斜线是为了防止在文章中转码,看官复制后替换为空即可。

关于wxss样式,推荐fixed + 100vh(背景高度)+ absolute(评论框)的组合,具体的见在下面的源码。切记:最好不要使用wx:ifwx:show visible 来控制弹层的显示与隐藏!!!也别问为哈,有兴趣的看官准备几个苹果手机,微信跨几个版本自行体验即可。保证把你坑哭到不要不要的!!![:调皮]

组件说完了,再来说下如何调用。此处以首页pages/index为例。

3.3、调用组件

首先要修改pages/index/index.json配置文件,源码如下:

  1. {
  2.   "usingComponents": {
  3.     "textareaFixedBottom": "/components/textarea-fixed-bottom/index"
  4.   },
  5.   "navigationBarTitleText": "底部评论框"
  6. }

修改后,我们在/pages/index/index.wxml页面上调用textareaFixedBottom即可引入我们前面封装好的评论框组件,源码如下:

  1. <!-- 固定在底部的输入框 start -->
  2. <view class="commentContent" bindtap="handleIsShowComment">
  3.   <view>写评论...</view>
  4. </view>
  5. <!-- 弹层评论框 start -->
  6. <textareaFixedBottom info="\{\{popupEvaluation\}\}" bind:myeventEvaluationRelease="handleEvaluationRelease" bind:myeventEvaluationClose="handleEvaluationClose"></textareaFixedBottom>
  7. <!-- 弹层评论框 end -->
  8. <!-- 固定在底部的输入框 end -->

再写下/pages/index/index.wxss就有点样子了。源码如下:

  1. /* 评论框 yiling 20200408 start */
  2. .commentContent {
  3.   position: fixed;
  4.   bottom: 20rpx;
  5.   left: 20rpx;
  6.   right: 20rpx;
  7.   font-size: 24rpx;
  8.   border: 2rpx solid #f0f0f0;
  9.   border-radius: 34rpx;
  10.   padding: 20rpx;
  11.   color: #999;
  12.   line-height: 24rpx;
  13. }
  14. /* 评论框 yiling 20200408 end */

由于demo中不方便跟后端通信,所以此处在点击发表评论后,前端直接把数据展示在页面上。最终演示效果见视频:兼容苹果手机的评论框模拟发表评论.mp4兼容苹果手机的评论框模拟发表评论(友情提示:点击上面的图片即可播放视频)

怎么样,是不是很赞?喜欢就点个star吧!

四、demo源码

demo源码已上传到了github上的dev-textarea-fixed-bottom-20200410 分支中。如果看官需要研究源码,可以点击下面的链接进行访问并下载。

  1. 网址: 戳我前往github查看源码

五、最后

上述源码可直接用到实际项目中,若看官在使用过程中遇到问题或有不明白的地方,可与艺灵联系。

转载声明:
  若亲想转载本文到其它平台,请务必保留本文出处!
本文链接:/xwzj/2020-04-10/weixin-textarea-fixed-bottom.html

若亲不想直保留地址,含蓄保留也行。艺灵不想再看到有人拿我的技术文章到他的地盘或者是其它平台做教(装)程(B)而不留下我的痕迹。文章你可以随便转载,随便修改,但请尊重艺灵的劳动成果!谢谢理解。

亲,扫个码支持一下艺灵呗~
如果您觉得本文的内容对您有所帮助,您可以用支付宝打赏下艺灵哦!

Tag: 微信小程序  小程序工具  小程序教程  textarea  苹果手机  ios bug  键盘遮挡  评论框  bindfocus  catchtouchmove  冒泡事件  w

上一篇: 微信小程序入坑教程二十一:使用wx.saveImageToPhotosAlbum保存图片时通过检测scope.writePhotosAlbum权限来提醒用户是否需要授权   下一篇: 微信小程序从入坑到放弃二十三:都0202年了,textarea在ios上的bug咋还未修复呢

相关文章

工具分享之超级赞的截图神器 工具分享之超级赞的录制Gif动图神 工具分享之Vue Devtools 微信小程序踩坑系列之扫普通链接二 每月免费领6GB流量,拿好不谢 Vue3学习之ref()用法 @vue/cli3项目开发之记一次手动配 uni-app跨端开发微信小程序之动态 uni-app跨端开发微信小程序之nodej uni-app跨端开发微信小程序之手把

评论区

我要评论

近期更新

权限破解之一键复制某sdn上的代码块 浅聊某sdn是如何实现未登录时屏蔽复制的 bug复盘之如何优雅的实现表格跨页勾选 记一次APP内调起微信支付时首次成功唤醒,后面 记一次注销联通卡的吐血经历 2023年敬业福获取方法 bug复盘之除数为0会怎样? Vite2项目优化之线上功能有异常,如何快速排查 bug复盘之Vite2项目在线上报错,修复后却意外发 工具分享之图片压缩

热门标签

微信小程序 小程序 用户体验 uni-app gulp教程 @vuecli3 vue.js 路由守卫 vuex vue项目实战 路由 自动化构建 破解 网站管理系统 ajax php二次开发 在线生成 京东装修 破解淘宝css权限 jquery插件制作 淘宝店铺装修教程 ie6 bug jquery特效 css3 注册插件 源码分享 悬浮代码 视频教程 全屏模板框架 footer-more-trigger 鼠标滑过特效 sn-simple-logo 淘宝店铺装修经验汇总 喜欢代码 弹出层 宝贝分享代码 购物车代码 登陆插件 宝贝收藏代码 详情页全屏 天猫关注带数字 导航特效 遮罩层特效 修改淘宝销量 flash动画 模块下10px问题 二级下拉菜单 轮播特效 京东店铺装修 插件下载 淘宝漏洞 鼠标跟随 隐藏的店招/模块 css3边框阴影 赚积分

点击排行

为了抓包某app,我折腾了10天,原来他是这样防抓包的 纯css实现超宽图片全屏居中(兼容淘宝店铺) css3边框阴影效果 淘宝店内搜索框代码生成器 淘宝天猫pc端宝贝转无线端链接工具 全屏海报 如何开启HBuilder的javascript语法错误提示功能 淘宝天猫店铺装修问题与技巧性经验汇总 Vue.js实例之v-show用法 Vue.js实例之v-bind:style用法

站长推荐

在线生成软件帮助文档 实现淘宝基础版详情页导航全屏背景的方法 第二期:玩转淘宝店铺装修 网站部分文章更新动态一览表 淘宝天猫店铺装修问题与技巧性经验汇总 淘宝Widget库中轮播特效从入门到精通 曝淘宝网往期改销量多处漏洞 淘宝卖家有无必要开通css 纯css实现超宽图片全屏居中(兼容淘宝店铺) 鼠标滑过图片显示遮罩层特效集合(16种不同特效任你挑选)

聚圣源个体户 起名定制公司起名网宝宝起名宝宝起名阿宁为什么要当人蛇韩姓取名起名大全大全帝国精华采样怎么做什么是最大公约数民国小说陈冠希头像吧踩空间经典留言网上起名哪个可信2022虎宝宝起名字大全双宝宝起名brazzersgirls免费给女孩宝宝起个好名字保安公司名字起名大全禽流感新闻起一个字的名字女生起名缺火牛年祝福贡献力量奔跑原唱数虎学而不厌的厌是什么意思culture怎么读xvideoscom中国人起名建筑劳务公司名字姓崔起名字大全男基金公司起名最强大脑选手破案淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化