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


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 相关文章推荐
JS俄罗斯方块,包含完整的设计理念
Dec 11 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
基于jquery的simpleValidate简易验证插件
Jan 31 Javascript
javascript数据结构与算法之检索算法
Apr 04 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 Javascript
vue侧边栏动态生成下级菜单的方法
Sep 07 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 Javascript
手机浏览器唤起微信分享(JS)
Oct 11 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
Python合并字符串的3种方法
2015/05/21 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
python中使用print输出中文的方法
2018/07/16 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python 爬虫性能相关总结
2020/08/03 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
工作自荐信
2013/12/11 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
公关活动策划方案
2014/05/25 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL