微信小程序实现漂亮的弹窗效果


Posted in Javascript onMay 26, 2020

最近项目里需要实现一个带着logo的美美哒弹窗,可是翻遍小程序的文档也只能见到wx.showModal这个丑丑的东西……
场面一度十分尴尬
可是得做啊,要不然产品大姐又要暴走了……
好吧,来研究一下模态对话框的性质自己DIY吧~

实现思路

模态对话框之所以被叫做“模态”,就是因为在它弹出的时候,用户如果不关闭这个对话框,是无法对其他窗口进行操作的。
那么这样一来,我们的思路就很明确了:

1. 构建一个蒙层(mask),使得背景变暗,并且阻止用户对对话框外界面的这里写代码片点击事件;
2. 构建一个对话框,在需要时弹出即可(弹出同时触发蒙层)。

示例代码

.wxml:

<view class="mask" catchtouchmove="preventTouchMove" wx:if="{{showModal}}"></view>

<view class="modalDlg" wx:if="{{showModal}}">
 <image src="/figures/logo-smile.png"/>
 <text>欢迎来到模态对话框~</text>
 <button bindtap="go">点我可以关掉对话框</button>
</view>

<button bindtap="submit">点我弹窗</button>

.wxss:

.mask{
 width: 100%;
 height: 100%;
 position: fixed;
 top: 0;
 left: 0;
 background: #000;
 z-index: 9000;
 opacity: 0.7;
}

.modalDlg{
 width: 580rpx;
 height: 620rpx;
 position: fixed;
 top: 50%;
 left: 0;
 z-index: 9999;
 margin: -370rpx 85rpx;
 background-color: #fff;
 border-radius: 36rpx;
 display: flex;
 flex-direction: column;
 align-items: center;
}

.js:

Page({

 data: {
  showModal: false
 },

 submit: function() {
  this.setData({
  showModal: true
  })
 },

 preventTouchMove: function() {

 },


 go: function() { 
  this.setData({
  showModal: false
  })
 }

})

需要注意的地方

  1. 蒙层view中绑定的preventTouchMove函数是一个空函数,使用了catch事件,目的就是阻止touchmove这样一个冒泡事件继续向下传递。
  2. 蒙层的wxss样式中,指定其大小为100%以占满整个屏幕。
  3. 模态对话框与蒙层的wxss样式中均有z-index属性,为的是保证对话框始终浮在蒙层的上方(即对话框的z-index始终要比蒙层的大)

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

Javascript 相关文章推荐
可实现多表单提交的javascript函数
Aug 01 Javascript
JQuery 学习笔记 选择器之五
Jul 23 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
js实现简单鼠标跟随效果的方法
Apr 10 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
js简单设置与使用cookie的方法
Jan 22 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
es6的数字处理的方法(5个)
Mar 16 Javascript
vue2中使用less简易教程
Mar 27 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
Aug 17 Javascript
vue-router 中 meta的用法详解
Nov 01 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 Javascript
Angular通过指令动态添加组件问题
Jul 09 #Javascript
js实现左右两侧浮动广告
Jul 09 #Javascript
vue-router中scrollBehavior的巧妙用法
Jul 09 #Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 #Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 #Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 #Javascript
vue-cli配置环境变量的方法
Jul 09 #Javascript
You might like
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
php curl发送请求实例方法
2019/08/01 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
js验证账户名是否重复
2020/05/26 Javascript
JS实现放大镜效果
2020/09/21 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
护理自荐信
2013/10/22 职场文书
安踏广告词改编版
2014/03/21 职场文书
行政专员求职信范文
2014/05/03 职场文书
党员检讨书范文
2014/12/27 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
电台广播稿范文
2015/08/19 职场文书
2016春季运动会前导词
2015/11/25 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL