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


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游戏之优化篇
Nov 08 Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 Javascript
javascript实现在线客服效果
Jul 15 Javascript
js动态生成form 并用ajax方式提交的实现方法
Sep 09 Javascript
JS匿名函数类生成方式实例分析
Nov 26 Javascript
Vue表单验证插件的制作过程
Apr 01 Javascript
JQuery判断正整数整理小结
Aug 21 jQuery
vue 计时器组件的实现代码
Sep 14 Javascript
详解如何让Express支持async/await
Oct 09 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
17道题让你彻底理解JS中的类型转换
Aug 08 Javascript
微信小程序中wxs文件的一些妙用分享
Feb 18 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP会话处理的10个函数
2015/08/11 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
js获取Get值的方法
2016/09/29 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
python 实现堆排序算法代码
2012/06/05 Python
python中self原理实例分析
2015/04/30 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python过滤列表用法实例分析
2016/04/29 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python爬虫与反爬虫大战
2020/07/30 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
工程部经理岗位职责
2013/12/08 职场文书
建筑专业自荐信范文
2014/01/05 职场文书
一年级班主任感言
2014/03/08 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
公司合作协议范文
2014/10/01 职场文书
详解Python中的for循环
2022/04/30 Python
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技