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

  • 相关阅读:
    EasyDarwin开源平台直播架构
    EasyDarwin开源平台直播架构
    ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播
    ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播
    开源G711(PCMA、PCMU)/G726转AAC项目EasyAACEncoder
    开源G711(PCMA、PCMU)/G726转AAC项目EasyAACEncoder
    RTSP/RTMP/HLS/HTTP流媒体播放器EasyPlayer
    开源流媒体播放器EasyPlayer
    vs添加对dll的引用
    vs添加对dll的引用
  • 原文地址:https://www.cnblogs.com/lguow/p/10399544.html
Copyright © 2011-2022 走看看