因为默认的弹窗很丑。所以决定本人写一个仿IOS的模态弹窗组件
先看下效果图:
能够扫码体验
目前只是简略实现了一些性能:能够管制确定和勾销按钮的文字、色彩、显示程序。
应用办法:
1、在页面的json配置文件外面增加组件
{ "usingComponents": { "dialog": "/components/dialog/dialog" }}
2、页面的wxml外面引入弹窗组件
3、在页面的js外面初始化组件
/**
- 生命周期函数--监听页面加载
*/
onLoad: function (options) { this.dialog = this.selectComponent('#dialog');}
4、接下来就能够应用了。调用示例
this.dialog.showDialog({ title: "确定要删除以后清单吗", content: "删除后,清单就找不回来了哦", cancelText: "我点错了", confirmText: "我要删除", confirmColor: "#f96e49", cancelColor: "#3790EE", showCancel: true, confirmPosition: "left", cancelHandler: function () { console.log("点击了勾销按钮"); }, confirmHandler: function () { console.log("点击了确定按钮OUTER"); }});
几年前写的代码,间接拿来用。相对来说比较简单。没有花里胡哨的(有点low我晓得。。)
整个组件的原代码如下:
1、dialog.wxml
<view class="custom_dialog" wx:if="{{show}}"> <view class="cover"></view> <view class="dialog"> <view class="tip flex_center {{noTitle?'no_tip':''}}"> <view class="flex_full">{{title}}</view> </view> <view class="content flex_baseline {{noContent?'no_content':''}}"> <view class="flex_full">{{content}}</view> </view> <view class="op_btn flex_center" wx:if="{{confirmPosition=='right'}}"> <view class="cancel flex_full" style="color: {{cancelColor}}" wx:if="{{showCancel}}" catchtap="_cancelHandler">{{cancelText}}</view> <view class="confirm flex_full" style="color: {{confirmColor}}" catchtap="_confirmHandler" wx:if="{{!confirmNeedAuth}}">{{confirmText}}</view> <button class="confirm reset-btn flex_full" wx:else style="color: {{confirmColor}}" open-type="getUserInfo" bindgetuserinfo="_confirmHandler">{{confirmText}}</button> </view> <view class="op_btn flex_center" wx:if="{{confirmPosition=='left'}}"> <view class="confirm flex_full" style="color: {{confirmColor}}" catchtap="_confirmHandler" wx:if="{{!confirmNeedAuth}}">{{confirmText}}</view> <button class="confirm reset-btn flex_full" wx:else style="color: {{confirmColor}}" open-type="getUserInfo" bindgetuserinfo="_confirmHandler">{{confirmText}}</button> <view class="cancel flex_full" style="color: {{cancelColor}}" wx:if="{{showCancel}}" catchtap="_cancelHandler">{{cancelText}}</view> </view> </view></view>
2、dialog.wxss
.flex_center { display: flex; align-items: center;}.flex_end { display: flex; align-items: flex-end;}.flex_baseline { display: flex; align-items: baseline;}.flex_full { flex: 1;}.reset-btn:after { border: none;}.reset-btn { background-color: #FAFAFA; margin: 0; padding: 0; font-size: 32rpx; border-radius: 24rpx;}.custom_dialog{}.custom_dialog .cover{ background-color: #111; opacity: 0.6; position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 5000;}.custom_dialog .dialog{ width: 560rpx; border-radius: 24rpx; background-color: #FAFAFA; position: fixed; top: 50%; left: 50%; z-index: 6000; margin: -140rpx 0 0 -280rpx; padding-top: 10rpx; text-align: center;}.custom_dialog .dialog .tip, .custom_dialog .dialog .single_tip{ font-size: 32rpx; color: #242424;}.custom_dialog .dialog .tip{ padding: 32rpx 32rpx 30rpx; /*height: 100rpx;*/ text-align: center; box-sizing: border-box; font-weight: bold;}.custom_dialog .dialog .single_tip{ height: 160rpx; line-height: 1.6;}.custom_dialog .dialog .content, .custom_dialog .dialog .single_content{ font-size: 29rpx; line-height: 1; color: #161616; padding: 0 20rpx 40rpx;}.custom_dialog .dialog .content{ margin-top: -10rpx; /*height: 70rpx;*/}.custom_dialog .dialog .single_content{ height: 160rpx; line-height: 160rpx;}.custom_dialog .dialog .no_content{ padding-bottom: 20rpx !important;}.custom_dialog .dialog .no_tip{ padding-bottom: 10rpx !important;}.custom_dialog .dialog .op_btn{ border-top: 1rpx solid #ccc; height: 96rpx; line-height: 96rpx; font-size: 32rpx;}.custom_dialog .dialog .op_btn .confirm{ color: #3790EE;}.custom_dialog .dialog .op_btn .cancel{ color: #FF644E;}.custom_dialog .dialog .op_btn view{ border-right: 1rpx solid #ccc;}.custom_dialog .dialog .op_btn view:last-child{ border: none;}
3、dialog.js
const tabbar = require('../../utils/tabbar.js');Component({ /** * 组件的属性列表 */ properties: {}, /** * 组件的初始数据 */ data: { show: false, title: "",//题目 content: "",//内容 noTitle: false,//是否显示题目 noContent: false,//是否显示内容 showCancel: true,//是否显示勾销按钮 cancelText: "勾销",//勾销按钮文字 cancelColor: "#FF644E",//勾销按钮色彩 confirmText: "确定",//确定按钮文字 confirmColor: "#3790EE",//确定按钮色彩 confirmPosition: "right",//确定按钮地位:left/right cancelHandler: null,//点击勾销按钮回调事件 confirmHandler: null//点击确定按钮回调事件 }, /** * 组件的办法列表 */ methods: { showDialog: function (content) { var that = this; that.setData({ show: true, title: content.title ? content.title : "", content: content.content ? content.content : "", noTitle: !content.title ? true : false, noContent: !content.content ? true : false, cancelText: content.cancelText ? content.cancelText : that.data.cancelText, cancelColor: content.cancelColor ? content.cancelColor : that.data.cancelColor, confirmText: content.confirmText ? content.confirmText : that.data.confirmText, confirmColor: content.confirmColor ? content.confirmColor : that.data.confirmColor, showCancel: content.showCancel != null ? content.showCancel : that.data.showCancel, confirmPosition: content.confirmPosition ? content.confirmPosition : that.data.confirmPosition, confirmNeedAuth: content.confirmNeedAuth ? content.confirmNeedAuth : that.data.confirmNeedAuth, cancelHandler: content.cancelHandler, confirmHandler: content.confirmHandler }); tabbar.hideTab(this); }, _cancelHandler: function () { console.log("点击了勾销按钮INNER"); this.setData({ show: false }); tabbar.showTab(this); typeof this.data.cancelHandler == 'function' && this.data.cancelHandler(); }, _confirmHandler: function (e) { console.log("点击了确定按钮INNER"); this.setData({ show: false }); tabbar.showTab(this); typeof this.data.confirmHandler == 'function' && this.data.confirmHandler(e); } }});