小程序 textarea、input 层级过高,导致填写内容穿透,z-index无效问题解决方案。

小程序的textare、input输入框层级是最高的 那么我们在textare、input输入的内容就会总是显示在最上一层。

这是时为什么呢?官方文档有说明,因为textare、input这些是原生组件。原生组件的层级是最高的,不管其它非原生组件z-index设置多大,原生组件都无法覆盖在原生组件上。想了很久终于想到个办法,但是并不完美。

思路:textarea输入完成时,将textarea隐藏,将输入内容显示在一个text文本框,此时页面没有原生组件textarea,底部的价格浮层就可完美遮住输入内容。当点击text输入框时,又将text隐藏,显示textarea,并将textarea的焦点选中,这样又可以继续输入内容。这样就不会有穿透问题。主要运用了textarea的bindblur(输入框失去焦点触发事件)、bindconfirm(输入点击完成触发事件)、focus(获取焦点 Boolean)。

WXML:

JS:

page({
    data: {
        onFocus: false,    //textarea焦点是否选中
        isShowText:false, //控制显示 textarea 还是 text
        remark: '',        //用于存储textarea输入内容
    },
    onShowTextare() {       //显示textare
        this.setData({
            isShowText: false,
            onFacus: true
        })
    },
    onShowText() {       //显示text
        this.setData({
            isShowText: true,
            onFacus: false
        })
    },
    onRemarkInput(event) {               //保存输入框填写内容
        var value = event.detail.value;
        this.setData({
            remark: value,
        });
    },
})

就是这样就不完美的解决了textare穿透的问题了,输入完成滚动页面,底部价格浮层都可以完美遮住输入框内容(因为此时并没有输入框,只有text文本框,当然不会出现层级穿透问题了)。但是当用户在textarea正在输入时,滚动页面此时显示的是textarea,并没有输入完成触发事件用text替换textarea。此时任然存在穿透显示问题。

这就是我能想到的解决办法了。0.0  如有不足或更好的解决方案,欢迎留言交流。

原文地址:https://www.cnblogs.com/lguow/p/10399544.html