微信小程序自定义modal弹窗组件的方法详解


Posted in Javascript onDecember 20, 2020

微信小程序开发中官方自带的wx.showModal,这个弹窗API有时候并不能满足我们的弹窗效果,所以往往需要自定义modal组件。下面我们进行一个自定义modal弹窗组件的开发,并进行组件的引用,组件可自定义底部是一个还是两个按钮。效果如下。

微信小程序自定义modal弹窗组件的方法详解
微信小程序自定义modal弹窗组件的方法详解

首先我们可以在跟目录下创建一个components文件夹存放所有的组件。新建一个modal文件夹,下面新建modal.js、modal.json、modal.wxml、modal.wxss四个文件。

微信小程序自定义modal弹窗组件的方法详解

modal.wxml布局文件:

<view class='modal-mask' wx:if='{{show}}' bindtap='clickMask'>
 <view class='modal-content'>
 <scroll-view scroll-y class='main-content'>
  <slot></slot>
 </scroll-view>
 <view class='modal-footer'>
  <view wx:if='{{!single}}' class='cancel-btn' bindtap='cancel'>取消</view>
  <view class='confirm-btn' bindtap='confirm'>确定 </view>
 </view>
 </view>
</view>

modal.wxml文件中的一些说明:

show变量控制弹窗显示或隐藏状态,clickMask是点击遮罩层的事件,可控制点击遮罩是否隐藏modal弹窗,内容中用scroll-view是为了满足当内容过多时一页显示不全时可以上下滚动浏览的效果(如果内容很少直接用view标签也可以),scroll-y表示允许纵向滚动(如果不需要可以删掉)。****为组件引用时的自定义内容替换掉就好了。single变量控制底部按钮是一个还是两个。cancel点击取消绑定的事件,confirm点击确定绑定的事件。

modal.json文件内容:

{
 "component": true, 
 "usingComponents": {}
}

modal.json文件内容说明:

“component”: true, 表示这是一个组件文件,usingComponents用于引用别的组件,这里没引用其他组件空{}就行。

modal.wxss 文件样式

/* components/modal/modal.wxss */
/*遮罩层*/
.modal-mask{
 display: flex;
 justify-content: center;
 align-items: center;
 position: fixed;
 left: 0;
 right: 0;
 top: 0;
 bottom: 0;
 background-color: rgba(0,0,0,0.5);
 z-index: 999;
}
/*遮罩内容*/
.modal-content{
 display: flex;
 flex-direction: column;
 width: 80%;
 background-color: #fff;
 border-radius: 10rpx;
 padding: 20rpx;
 text-align: center;
}
/*中间内容*/
.main-content{
 flex: 1;
 height: 100%;
 overflow-y: hidden; 
 max-height: 80vh; /* 内容高度最高80vh 以免内容太多溢出*/
}
/*底部按钮*/
.modal-footer{
 display: flex;
 flex-direction: row;
 height: 80rpx;
 line-height: 80rpx;
 border-top: 2rpx solid #D2D3D5;
 margin-top: 30rpx;
}
.cancel-btn, .confirm-btn{
 flex: 1;
 height: 100rpx;
 line-height: 100rpx;
 text-align: center;
 font-size: 32rpx;
}
.cancel-btn{
 color: #000;
 border-right: 2rpx solid #D2D3D5;
}
.confirm-btn {
 color: #09BA07
}

以上样式布局根据个人需求自行修改调整即可。

modal.js文件内容

Component({
 /**
 * 组件的属性列表
 */
 properties: {
 //是否显示modal弹窗
 show: {
  type: Boolean,
  value: false
 },
 //控制底部是一个按钮还是两个按钮,默认两个
 single: {
  type: Boolean,
  value: false 
 }
 },

 /**
 * 组件的初始数据
 */
 data: {

 },

 /**
 * 组件的方法列表
 */
 methods: {
 // 点击modal的回调函数
 clickMask() {
  // 点击modal背景关闭遮罩层,如果不需要注释掉即可
  this.setData({show: false})
 },
 // 点击取消按钮的回调函数
 cancel() {
  this.setData({ show: false })
  this.triggerEvent('cancel') //triggerEvent触发事件
 },
 // 点击确定按钮的回调函数
 confirm() {
  this.setData({ show: false })
  this.triggerEvent('confirm')
 }
 }
})

到此为止,组件已经定义好了。下面我们可以在其他页面引用这个组件了。比如我在home这个页面引用这个自定义modal弹窗。

微信小程序自定义modal弹窗组件的方法详解

首先在home.json文件中引用组件:

home.json文件内容如下:

{
	"usingComponents": {
 		"modalView": "../../components/modal/modal"
	}
}

这里modalView为modal弹窗的自定义标签,可随便定义。

接着,在home.wxml中将modalView标签添加到你想要显示的位置。例如:

home.wxml文件内容如下

<view>
 <!-- modal弹窗-->
 <modalView show="{{showModal}}" bindcancel="modalCancel" bindconfirm='modalConfirm' single='{{single}}'>
 <view class='modal-content'>
  <scroll-view scroll-y class='main-content'>
  <view>这里面可替换成你想显示的其他内容</view>
  <view>这里面可替换成你想显示的其他内容</view>
  <text>这里面可替换成你想显示的其他内容</text>
  </scroll-view>
 </view>
 </modalView>
</view>

home.js文件内容如下

Page({

 /**
 * 页面的初始数据
 */
 data: {
 showModal: true, // 显示modal弹窗
 single: false // false 只显示一个按钮,如果想显示两个改为true即可
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {

 },
 // 点击取消按钮的回调函数
 modalCancel(e) {
 // 这里面处理点击取消按钮业务逻辑
 console.log('点击了取消')
 },
 // 点击确定按钮的回调函数
 modalConfirm(e) {
 // 这里面处理点击确定按钮业务逻辑
 console.log('点击了确定')
 }
})

在js文件中定义showModal控制modal弹窗的显示状态,single设置为false 表示只显示一个按钮

微信小程序自定义modal弹窗组件的方法详解

如果想显示两个按钮将false改为true即可,如下效果:

微信小程序自定义modal弹窗组件的方法详解

两个函数modalCancel和modalConfirm用于处理点击取消按钮业务逻辑

和处理点击确定按钮业务逻辑。比如我这里点击了确认按钮可看到控制台打印出了“点击了确定”。

微信小程序自定义modal弹窗组件的方法详解

好了,微信小程序一个自定义modal弹窗的组件封装和引用方法就这么搞定了O(∩_∩)O~

到此这篇关于微信小程序自定义modal弹窗组件的文章就介绍到这了,更多相关微信小程序自定义modal弹窗组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
javascript if条件判断方法小结
May 17 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
Dec 02 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
浅谈React中的元素、组件、实例和节点
Feb 27 Javascript
AngularJS发送异步Get/Post请求方法
Aug 13 Javascript
微信小程序学习之自定义滚动弹窗
Dec 20 #Javascript
JavaScript中arguments的使用方法详解
Dec 20 #Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 #Vue.js
vue中如何添加百度统计代码
Dec 19 #Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 #Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 #Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 #Vue.js
You might like
php 短链接算法收集与分析
2011/12/30 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
对python 调用类属性的方法详解
2019/07/02 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
公务员职业生涯规划书范文  
2014/01/19 职场文书
《凡卡》教学反思
2014/04/09 职场文书
保护环境倡议书
2014/04/14 职场文书
旅游节目策划方案
2014/05/26 职场文书
学雷锋的心得体会
2014/09/04 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python
Python闭包的定义和使用方法
2022/04/11 Python