网站首页 > 技术文章 正文
点击右上方红色按钮关注“web秀”,让你真正秀起来
前言
今天就来谈谈微信小程序,原生组件层级导致的问题。 官方是这样说的:“原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上。”
有了这句话,如果我们用到了原生组件,就必须考虑层级问题了。否则很容易被原生组件搞乱层级显示问题。
比如:意见反馈页面,有一个textarea,填写内容后,提交有一个自定义弹框提示(询问框),这时候如果textarea和弹框重叠,就会发现,textarea的内容居然在弹框上面,“血案”就此引发。
如果你没有看过官方的解析,第一次出现这个问题,心里一定有一句话,不知当讲不当讲…
如何解决微信小程序原生组件层级问题?
针对上面的问题,我们想出了一个解决方案。 当textarea失去焦点时,我们就隐藏textarea,用其他元素来显示已经输入的内容,点击这块区域,又把textarea显示出来,让其可以输入。
具体代码:
<text class="text" v-if="showText" @click="showTextarea">{{msg||'请输入内容'}}</text> <textarea v-else v-model="msg" @blur="confirmText" @confirm="confirmText" :focus="onfocus" placeholder="请输入内容" maxlength="1000" ></textarea> <script> export default { data () { return { msg: '', onfocus: false, showText: true } }, methods: { showTextarea () { this.showText = false this.onfocus = true }, confirmText () { this.showText = true this.onfocus = false } } } </script>
问题延伸
如果一个textarea全屏的,即高度100%,底部有一个浮动提交按钮,这样也会出现上述问题。
这个问题又怎么解决了?上面的解决方案,在这里已经不管用了。
官方给出了针对textarea的解决方式,使用cover-view和 cover-image替代,这两个组件也是原生组件,可以覆盖textarea组件。
<cover-view class="btn-save"> <button @click="$refs.dialog.show()">提交</button> </cover-view>
微信小程序原生组件有哪些?
camera canvas input(仅在focus时表现为原生组件) live-player live-pusher map textarea video
微信小程序原生组件的使用限制
微信小程序由于原生组件脱离在 WebView 渲染流程外,因此在使用时有以下限制:
1、原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上。 后插入的原生组件可以覆盖之前的原生组件。
2、原生组件还无法在 <picker-view> 中使用。 基础库 2.4.4 以下版本,原生组件不支持在 <scroll-view>、<swiper>、<movable-view> 中使用。
3、部分CSS样式无法应用于原生组件,例如: (1)无法对原生组件设置 CSS 动画 (2)无法定义原生组件为 position: fixed (3)不能在父级节点使用 overflow: hidden 来裁剪原生组件的显示区域
4、原生组件的事件监听不能使用 bind:eventname 的写法,只支持 bindeventname。原生组件也不支持 catch 和 capture 的事件绑定方式。
5、原生组件会遮挡 vConsole 弹出的调试面板。 在工具上,原生组件是用web组件模拟的,因此很多情况并不能很好的还原真机的表现,建议开发者在使用到原生组件时尽量在真机上进行调试。
总结
小程序其实还有很多的坑,希望他们越做越好,让我们搬砖也越来越轻松。你在开发小程序中,遇到过什么奇葩问题了?欢迎留言,大家一起探讨。
公告
喜欢小编的点击关注,了解更多知识!
源码地址,可以点击下方“了解更多”获取!
猜你喜欢
- 2024-10-08 「译」22个必备的CSS小技巧(css%)
- 2024-10-08 盘点Pandas 的100个常用函数(pandas所有方法详解)
- 2024-10-08 CSS常考知识点(css的)
- 2024-10-08 CSS position 属性(css position:relative)
- 2024-10-08 CSS学习笔记--定位position属性的学习
- 2024-10-08 CSS3中神奇的box-shadow属性,到现在你还还没听说过吗?
- 2024-10-08 html网页的代码大全(html网页代码大全 分行)
- 2024-10-08 CSS四种定位static、relative、absolute、fixed
- 2024-10-08 徒手撸-登录页面(1)(徒手hit)
- 2024-10-08 请避免犯这9个常见的 CSS “坏习惯”
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 534℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 496℃MySQL service启动脚本浅析(r12笔记第59天)
- 475℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 473℃启用MySQL查询缓存(mysql8.0查询缓存)
- 453℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 432℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 430℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)