微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

微信小程序自定义模态对话框实例详解

由于官方API提供的显示模态弹窗,只能简单地显示文字内容,不能对对话框内容进行自定义,欠缺灵活性,所以自己从模态弹窗的原理角度来实现了自定义的模态对话框。

wx.showModal(OBJECT) 自定义 模态对话框

涉及文件

界面 方法

效果

代码 .wxml

rush:xml;">

样式 .wxss

rush:css;"> .show-btn { margin-top: 100rpx; color: #22cc22; }

.modal-mask {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
background: #000;
opacity: 0.5;
overflow: hidden;
z-index: 9000;
color: #fff;
}

.modal-dialog {
width: 540rpx;
overflow: hidden;
position: fixed;
top: 50%;
left: 0;
z-index: 9999;
background: #f9f9f9;
margin: -180rpx 105rpx;
border-radius: 36rpx;
}

.modal-title {
padding-top: 50rpx;
font-size: 36rpx;
color: #030303;
text-align: center;
}

.modal-content {
padding: 50rpx 32rpx;
}

.modal-input {
display: flex;
background: #fff;
border: 2rpx solid #ddd;
border-radius: 4rpx;
font-size: 28rpx;
}

.input {
width: 100%;
height: 82rpx;
font-size: 28rpx;
line-height: 28rpx;
padding: 0 20rpx;
Box-sizing: border-Box;
color: #333;
}

input-holder {
color: #666;
font-size: 28rpx;
}

.modal-footer {
display: flex;
flex-direction: row;
height: 86rpx;
border-top: 1px solid #dedede;
font-size: 34rpx;
line-height: 86rpx;
}

.btn-cancel {
width: 50%;
color: #666;
text-align: center;
border-right: 1px solid #dedede;
}

.btn-confirm {
width: 50%;
color: #ec5300;
text-align: center;
}

事件及方法 .js

rush:js;"> Page({ data: { showModal: false,},onLoad: function () { },/** * 弹窗 */ showDialogBtn: function() { this.setData({ showModal: true }) },/** * 弹出框蒙层截断touchmove事件 */ preventTouchMove: function () { },/** * 隐藏模态对话框 */ hideModal: function () { this.setData({ showModal: false }); },/** * 对话框取消按钮点击事件 */ onCancel: function () { this.hideModal(); },/** * 对话框确认按钮点击事件 */ onConfirm: function () { this.hideModal(); } })

实现思路解读及原理

界面解读:

一个蒙层+弹窗来组成,用绑定的数据{{showModal}}来控制弹窗的显示和隐藏

事件及方法解读: 让弹窗显示方法

rush:js;"> showDialogBtn: function() { this.setData({ showModal: true }) }

让弹窗消失的方法

rush:js;"> hideModal: function () { this.setData({ showModal: false }); }

这里有个要特别注意的地方,就是下面这个方法

rush:js;"> preventTouchMove: function () { }

为什么是空方法

因为要结合界面wxml看,蒙层view里有一个事件绑定一个可以滚动的界面,想想看,当弹窗弹出的时候用户还可以操作滚动列表,我想你的产品经理会来找你的。

3. 样式解读:(这个标题没加代码块标识,但还是像代码块一样被显示了,这是个bug!!!- -)

.modal-mask和.modal-dialog样式的写法需要特别注意。

主要是层级关系,弹窗要保证在最上层,不被界面遮挡,然后蒙层要遮挡住界面,但是不可遮挡弹窗。所以.modal-mask和.modal-dialog的z-index值要注意。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。