小程序开发之模态框组件封装


Posted in Javascript onApril 23, 2020

本文实例为大家分享了小程序模态框组件的封装具体代码,供大家参考,具体内容如下

一、前言

对于模态框肯定大家都知道,诸如:Bootstartp、element-ui、layui等等都有自己的弹出层,并可以之定义内容,但是小程序的弹出层原生的太简单,那么我们如果自定义呢?

其实很简单,就是一个遮罩、一个view内容区就搞定了!接下来看一下我自己封装后的模态框效果:

小程序开发之模态框组件封装

感觉还可以哈!

二、模态框组件的使用

1.先在使用页面的json注册该组件

{
 "navigationBarTitleText": "XXXX",
 "usingComponents": {
 "print-popups": "/components/popups/popups"
 }
}

2.使用组件

<view>
 <print-popups ifOpen='{{modelStatus}}' bind:ifClose='closeModel'>
 <view slot='popups_main' class='popups_main'>
 <view class='popups_item'>添加新设备</view>
 <view class='popups_item print_name'>
 <input class='print_input' value='设备1' auto-focus />
 <view class='print_tip'>(点击设备可编辑)</view>
 </view>
 <view class='popups_item print_id'>
 <input placeholder="请输入新添设备ID" />
 <view class='print_id_check'>可用</view>
 </view>
 <button class='popups_item print_btn' type='primary' size='mini'>添加</button>
 </view>
 </print-popups> 
</view>

3.添加隐藏/显示方法

Page({
 /**
 * 页面的初始数据
 */
 data: {
 modelStatus: false
 },
 /**
 * 点击按钮打开模态框
 */
 openModel () {
 const modelStatus = !this.modelStatus
 this.setData({ modelStatus})
 },
 /**
 * 子组件触发的事件
 */ 
 closeModel (event) {
 console.log(event.detail.value)
 this.setData({
 modelStatus: event.detail.value
 })
 }
})

三、模态框组件源码

1.Json文件

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

2.wxml文件

需要在阿里图标库找一张close.png的图片。

<!--components/popups/popups.wxml-->
<view wx:if="{{ifOpen}}">
 <view class='popups_shade' bindtap='popupsClose'></view>
 <view class='popups_content'>
 <image src='./images/close.png' class='popups_close' bindtap='popupsClose'></image>
 <slot name='popups_main'/>
 </view>
</view>

3.wxss文件

/* components/popups/popups.wxss */
/* 遮罩 */
.popups_shade {
 width: 100%;
 height: 100%;
 position: fixed;
 top: 0;
 left: 0;
 z-index: 1000;
 background: #000;
 opacity: 0.7;
 overflow: hidden;
}
/* 弹出层内容 */
.popups_content {
 width: 500rpx;
 height: 350rpx;
 overflow: hidden;
 position: fixed;
 top: 0px;
 left: 0px;
 bottom: 0px;
 right: 0px;
 margin: auto;
 z-index: 1001;
 background: #FAFAFA;
 border-radius: 5px;
}
.popups_close {
 width: 30rpx;
 height: 30rpx;
 position: absolute;
 right: 3px;
 top: 3px;
}

4.js文件

// components/popups/popups.js
Component({
 options: {
 multipleSlots: true
 },
 /**
 * 组件的属性列表
 */
 properties: {
 ifOpen: Boolean
 },

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

 /**
 * 父子组件通信
 * 组件的方法列表
 */
 methods: {
 popupsClose () {
 console.log('关闭弹出层' + this.properties.ifOpen)
 this.triggerEvent('ifClose', { value: !this.properties.ifOpen})
 }
 }
})

四、思路

主要是使用slot插槽可以不需要定义内容,可以在使用组件的页面自定义,这样就可以很好提高扩展性!

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

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

Javascript 相关文章推荐
日期 时间js控件
May 07 Javascript
javascript 随机展示头像实现代码
Dec 06 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
jquery常用方法及使用示例汇总
Nov 08 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
JS实现方形抽奖效果
Aug 27 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
Oct 19 Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
vue2.x 对象劫持的原理实现
Apr 19 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 Javascript
详解Vue3中对VDOM的改进
Apr 23 #Javascript
微信小程序实现滑动操作代码
Apr 23 #Javascript
微信小程序图片右边加两行文字的代码
Apr 23 #Javascript
Vue中通过vue-router实现命名视图的问题
Apr 23 #Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 #Javascript
JS eval代码快速解密实例解析
Apr 23 #Javascript
浅谈vue权限管理实现及流程
Apr 23 #Javascript
You might like
sphinx增量索引的一个问题
2011/06/14 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
django celery redis使用具体实践
2019/04/08 Python
如何获取Python简单for循环索引
2019/11/21 Python
python分布式计算dispy的使用详解
2019/12/22 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
房屋改造计划书
2014/01/10 职场文书
校运会入场式解说词
2014/02/10 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python