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


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 相关文章推荐
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
JavaScript每天必学之基础知识
Sep 17 Javascript
基于js中document.cookie全面解析
Sep 14 Javascript
electron + vue项目实现打印小票功能及实现代码
Nov 25 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
Apr 02 Javascript
Node 搭建一个静态资源服务器的实现
May 20 Javascript
vue 检测用户上传图片宽高的方法
Feb 06 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
Node.js API详解之 util模块用法实例分析
May 09 Javascript
json.stringify()与json.parse()的区别以及用处
Jan 25 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自定义session示例分享
2014/04/22 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
python的concat等多种用法详解
2018/11/28 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
基于pandas中expand的作用详解
2019/12/17 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
外企求职信范文分享
2013/12/31 职场文书
爱护公共设施标语
2014/06/24 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
2015年社区工作总结
2015/04/08 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js