微信小程序自定义模态弹窗组件详解


Posted in Javascript onDecember 24, 2019

小程序自带一个showModal弹窗,调用很简单,但是限制很多,title有字数限制,中间的content也只能放文字不能放组件,所以作为一个前端碰到那种连续好几个跟微信自带的模态弹窗风格一模一样,但是功能又花里胡哨的UI稿,就不能忍受频繁的复制粘贴了。自己写了一个组件,虽然调用起来比微信自带的麻烦一点,但是还蛮实用的。

微信小程序自定义模态弹窗组件详解

微信小程序自定义模态弹窗组件详解

微信小程序自定义模态弹窗组件详解

效果大概长这样。

上代码:

wxml:

<!-- 自定义模态弹窗 -->
<view class="modalDIY" wx:if="{{showModal}}">
 <view class="bg">
 <view class="modalTitle">{{title}}</view>
 <view class="modalContent">
  <view>{{content}}</view>
  <slot></slot>
 </view>
 <view class="modalOperate">
  <view bindtap="_cancel" hidden="{{!showCancel}}" style="color:{{cancelColor}}" class="cancelBtn">{{cancelText}}</view>
  <view bindtap="_comfirm" class="comfirmBtn" style="color:{{confirmColor}}">{{confirmText}}</view>
 </view>
 </view>
</view>

js:

const regeneratorRuntime = require('../../dependence/generator-runtime.js'); //这是一个es6转es5的js
Component({
 properties: {
 // 这里定义了innerText属性,属性值可以在组件使用时指定
 },
 data: {
 showModal: false,
 title: '温馨提示',
 content: '',
 showCancel: true,
 cancelColor: '#3a3a3a',
 cancelText: '取消',
 confirmColor: '#00800',
 confirmText: '确认',
 comfirm() { },
 cancel() { }
 },
 methods: {
 // 外部方法调用
 showModal(params) {
  this.setData({
  showModal: true,
  title: params.title || '温馨提示', //title
  content: params.content || '',//中间内容
  showCancel: params.showCancel == undefined ? true : params.showCancel,//是否显示左侧
  cancelColor: params.cancelColor || '#3a3a3a',//取消按钮文字颜色
  cancelText: params.cancelText || '取消',//左侧按钮文字
  confirmColor: params.confirmColor || '#09BA07',//右侧按钮文字颜色
  confirmText: params.confirmText || '确认',//右侧按钮文字
  /* 回调函数 */
  comfirm: params.comfirm || function(){},//点击确认(右侧按钮)
  cancel: params.cancel || function(){}//点击取消(左侧按钮)
  })
 },
 // 点击确定
 _comfirm() {
  this.setData({
  showModal: false
  },()=>{
  this.data.comfirm();
  })
 },
 // 点击取消
 _cancel() {
  this.setData({
  showModal: false
  },()=>{
  this.data.cancel();
  })
 }
 }
})
 
// 调用示例
// 引入组件后通过js selectComponent('#id')方法获得组件对象 再调用组件对象下的showModal方法 传入配置参数即可 可以在组件中自定义内容节点

wxss:

.modalDIY{
 position: fixed;
 z-index: 99999999;
 top: 0;
 left: 0;
 width: 100vw;
 height: 100vh;
 background: rgba(0,0,0,0.6);
 display: flex;
 align-items: center;
 align-content: center;
 justify-content: center;
}
.bg{
 background: #fff;
 text-align: center;
 border-radius: 10rpx;
 width: 90%;
}
.modalTitle{
 padding: 30rpx 40rpx 0 40rpx;
 font-size: 36rpx;
 line-height: 55rpx;
 color: #000;
}
.modalContent{
 padding: 20rpx 40rpx;
 font-size: 30rpx;
 color: #7a7a7a;
}
.modalOperate{
 height: 100rpx;
 line-height: 100rpx;
 border-top: 2rpx solid #eee;
 display: flex;
}
.cancelBtn{
 border-right: 2rpx solid #eee;
 flex: 1;
}
.comfirmBtn{
 flex: 1;
}

json:(记住要把component设置成true)

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

调用的时候需要贴别说明一下,拿我上面示例图的第二个弹窗的调用为例

首先引入组件

微信小程序自定义模态弹窗组件详解

在wxml中引用组件

微信小程序自定义模态弹窗组件详解

在js中可以配置一些颜色之类的样式

首先通过selectComponent这个方法获得组件对象,可以存成全局的常量。

微信小程序自定义模态弹窗组件详解

我们要调用这个对象下自己封装的showModal方法

微信小程序自定义模态弹窗组件详解

完毕。

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
csdn 批量接受好友邀请
Feb 19 Javascript
JQuery之拖拽插件实现代码
Apr 14 Javascript
JS鼠标滑过图片时切换图片实现思路
Sep 12 Javascript
jquery checkbox实现单选小例
Nov 27 Javascript
javascript实例--教你实现扑克牌洗牌功能
May 15 Javascript
jQuery中:file选择器用法实例
Jan 04 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
jQuery选择器实例应用
Jan 05 Javascript
Avalonjs双向数据绑定与监听的实例代码
Jun 23 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
用vue写一个日历
Nov 02 Javascript
js实现鼠标点击页面弹出自定义文字效果
Dec 24 #Javascript
javascript实现鼠标点击生成文字特效
Dec 24 #Javascript
Javascript实现鼠标点击冒泡特效
Dec 24 #Javascript
javascript实现点击星星小游戏
Dec 24 #Javascript
JS实现小星星特效
Dec 24 #Javascript
JS实现星星海特效
Dec 24 #Javascript
JS实现图片切换特效
Dec 23 #Javascript
You might like
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
php curl 上传文件代码实例
2015/04/27 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
js href的用法
2010/05/13 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python使用htmllib分析网页内容的方法
2015/05/08 Python
python函数装饰器用法实例详解
2015/06/04 Python
python保存字符串到文件的方法
2015/07/01 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Python多线程实现同步的四种方式
2017/05/02 Python
zookeeper python接口实例详解
2018/01/18 Python
python re模块的高级用法详解
2018/06/06 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
Python单链表原理与实现方法详解
2020/02/22 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
十八大报告观后感
2014/01/28 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
欠款起诉书范文
2015/05/19 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
分享3个非常实用的 Python 模块
2022/03/03 Python