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


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实例教程(19) 使用HoTMetal(6)
Dec 23 Javascript
JavaScript Event学习第五章 高级事件注册模型
Feb 07 Javascript
始终在屏幕中间显示Div的代码(css+js)
Mar 10 Javascript
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
JavaScript代码复用模式实例分析
Dec 02 Javascript
js菜单点击显示或隐藏效果的简单实例
Jan 13 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
详解js中构造流程图的核心技术JsPlumb
Dec 08 Javascript
jquery checkbox的相关操作总结
Oct 17 Javascript
JS验证码实现代码
Sep 14 Javascript
bootstrap与pagehelper实现分页效果
Dec 29 Javascript
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
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命令行使用方法和命令行参数说明
2014/04/08 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
js控制frameSet示例
2013/09/10 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
python中的计时器timeit的使用方法
2017/10/20 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
python代码中怎么换行
2020/06/17 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
给实习单位的感谢信
2014/02/01 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
mysql的单列多值存储实例详解
2022/04/05 MySQL