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


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 相关文章推荐
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
jquery 隐藏与显示tr标签示例代码
Jun 06 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
jquery移动节点实例
Jan 14 Javascript
javascript实用方法总结
Feb 06 Javascript
前端性能优化及技巧
May 06 Javascript
js修改onclick动作的四种方法(推荐)
Aug 18 Javascript
JavaScript之class继承_动力节点Java学院整理
Jul 03 Javascript
vue select选择框数据变化监听方法
Aug 24 Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 Javascript
小程序实现上下切换位置
Nov 16 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
2019十大人气国漫
2020/03/13 国漫
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
PyQT实现多窗口切换
2018/04/20 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
小学新学期教师寄语
2014/01/18 职场文书
大学学习生活感言
2014/01/18 职场文书
出生证明公证书
2014/04/09 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS