input层级高 小程序_微信小程序textarea层级过高的问题及解决办法

本文讨论了微信小程序中textarea组件层级过高导致的遮挡问题,提出了两种解决方案:一是根据业务场景(如弹窗显示、底部fixed按钮)通过显示/隐藏组件来避免遮挡;二是使用cover-view和cover-image组件作为替代,但存在嵌套限制。同时,文章提到了官方虽提供了替代方案,但在某些场景下并不适用。
摘要由CSDN通过智能技术生成

一、前言

相信做过微信小程序开发的人应该都碰到过这个问题,因为这个需求实在太常见了,由于textarea是属于原生组件,层级最高,不管在页面中我们设置z-index值多少都会被textarea组件遮挡住,很影响用户体验,目前官方对该问题还没有修复,当然官方也给出了解决该问题的其他方案,使用cover-view和 cover-image替代,但个人感觉并不是很好,有一些限制。

二、使用场景及解决方案

1、弹窗显示

2、底部fixed定位的按钮,页面滚动时,例如添加购物车,显示价格

针对以上两种业务场景解决方式不同

针对场景1弹窗显示的处理方式

在显示弹窗时通过if或者绑定class属性将textarea组件隐藏,弹窗关闭时显示,如下

针对场景2(滚动)如何解决

我们在输入时使用textarea组件,不输入的时候text来显示文字和placeholder,这样我们需要单独设置几个标签

输入内容

用于显示文本内容

说说对这个活动看法吧

通过v-show来显示或隐藏该组件,使用scroll-view标签为文本内容设置可滚动,这里设置了isFocus聚焦,通过按钮的形式去触发textaare的Focus

完整代码如下:

v-model="content"

@blur="bindContentBlur"

v-show="isInputContentFocus"

placeholder="说说对这个活动看法吧"

v-bind:focus="isFocus"

>

scroll-y

class="content"

v-text="content"

@click="bindContentFocus"

v-show="isContentFocus"

>

说说对这个活动看法吧

data() {

return {

isContentFocus: true,

isInputContentFocus: false,

isFocus: false

};

},

methods: {

bindContentFocus(e) {

this.isFocus = true; //触发焦点

this.isContentFocus = false; //聚焦时隐藏内容文本标签

this.isInputContentFocus = true;

console.log("Focus isFocus", this.isFocus);

},

bindContentBlur(e) {

this.isContentFocus = true; //聚焦时隐藏内容文本标签

this.isInputContentFocus = false;

this.isFocus = false; //失去焦点

console.log("Blur isFocus", this.isFocus);

}

}

三、其他方式

官方给出了针对textarea的解决方式,使用cover-view和 cover-image替代,这两个组件也是原生组件,可以覆盖textarea组件

cover-image

class="btn btn-love btn-apply"

@click="apply"

:disabled="apply_status"

v-text="apply_status?'我已报名':'我要报名'"

>

不过这里有个限制就是 内只能嵌套 组件,view 标签的子节点树在真机上都会被忽略。

像上面场景2的需求,添加购物车,显示价格,很明显这种方式并不适用,当然如果底部我们只有一个button的话是可以使用这种方式去解决的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值