• 小程序 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  如有不足或更好的解决方案,欢迎留言交流。

  • 相关阅读:
    免密码输入ssh连接
    关于调用函数使用栈
    uos中tftp、nfs服务重启方法、路径
    uos安装dogtail首次打开提示可访问性,点击确定按钮如何自动化
    linux查看启动项
    5.gitlab提交时触发jenkins
    Fun blog
    Github Page 加速 | vercel ~~
    98--RocketMQ原生API收发消息
    97--RocketMQ工作原理
  • 原文地址:https://www.cnblogs.com/lguow/p/10399544.html
Copyright © 2020-2023  润新知