12_微信小程序-BLE低功耗蓝牙开发-自定义弹窗界面

在获取服务列表和特征值列表完成后,需要把相关的信息呈现出来,这里采用一个弹窗界面,把服务ID和特征值ID显示出来。微信小程序的原生弹窗不能满足需求,这里只有自定义弹窗窗界面了。

wxml代码:

<!--弹出框-->
<!--要加上catchtouchmove="dialogViewTouchMove",否则页面可滑动-->
<view class="dialogView" catchtouchmove="dialogViewTouchMove" wx:if="{{dialogViewShowFlag}}">
    <!--遮罩,用来处理弹出框之外区域的点击事件,并且防止点击事件穿透-->
    <view class="dialogMaskView" catchtap="dialogMashViewClick">
        <!--文本输入框遮罩,防止弹出框底层有文本框,输入事件就直接穿透过去了-->
        <textarea class="dialogMaskTextarea" disabled="{{true}}"></textarea>
    </view>
    <!--弹出内容-->
    <view class="dialogContentView">
        <text>弹出内容、弹出内容</text>
        <button bindtap="dialogContentButtonClick">按钮</button>
    </view>
</view>

wxss代码:

/*弹出框样式*/
.dialogView {
    width: 100%;
    height: 100%;
    /*设置弹出框在那一层,数值约大,越前面*/
    z-index: 9998;
}
/* 遮罩层 */
.dialogMaskView{
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0;
    left: 0;
    background: #000;
    opacity: 0.5;
}
/*遮罩层里面的文本输入框*/
.dialogMaskTextarea {
    width: 100%;
    height: 100%;
}


/* 内容层 */
.dialogContentView{
    height: 80%;
    width: 80%;
    /*设置弹出框在那一层,数值约大,越前面,设置内容层在弹出层的前面*/
    /* z-index: 9999; */
    position: fixed;
    top: 50px;
    left: 0;
    right: 0;
    margin: 0 auto;
    background-color: #fff;
    border-radius:5px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

在js文件中增加了一个点击内容层之外区域自动隐藏弹出窗的功能

dialogMashViewClick: function(e) {
        debug.Debug(BLECTR_MODUAL_NAME, debug.DEBUG_DEBUG, "dialogMashViewClick");
        // 点击内容层之外区域(遮罩层),隐藏弹出窗口
        this.data.dialogViewShowFlag = false;
        this.setData({['dialogViewShowFlag']: this.data.dialogViewShowFlag});
    },

最终的效果:

弹出界面有三个需要注意的地方

1. 弹出层导致页面可滑动问题

        在弹出窗口的view里面加上 catchtouchmove="dialogViewTouchMove" ,dialogViewTouchMove函数实现为空,用以拦截触摸滑动事件

2. 单击事件穿透(单击事件冒泡)

        当点击弹出层的时候,如果主页面对应的位置有按键,那个按键会响应,这个就是事件穿透了,需要阻止

        在遮罩层里面加入 catchtap="dialogMashViewClick" ,用以拦截点击事件。不要用bindtap,bindtap没有办法阻止事件冒泡问题。用户点击界面后,单击事件会一层一层的向父元素传递,直到遇到catchtap。

3. 输入框(input,texterea)输入穿透事件

        这个问题和单击事件类似,就是点击弹出窗的时候,如果主页面对应的位置有输入框,就会弹出键盘,并响应输入事件,这个是不愿意看到的。我尝试过用view去阻止,发现不行,所以在遮罩层里面又包裹了一个texteara控件,该控件和屏幕一样大,并且设置该控件不可用,用以屏蔽输入事件。

        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值