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


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设置css属性的代码
Dec 28 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
Jan 11 Javascript
让浏览器非阻塞加载javascript的几种方法小结
Apr 25 Javascript
jquery自动将form表单封装成json的具体实现
Mar 17 Javascript
js+css实现导航效果实例
Feb 10 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
Aug 28 jQuery
Angular中使用ng-zorro图标库部分图标不能正常显示问题
Apr 22 Javascript
js实现数字从零慢慢增加到指定数字示例
Nov 07 Javascript
js实现模拟购物商城案例
May 18 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 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
缅甸的咖啡简史
2021/03/04 咖啡文化
php自动跳转中英文页面
2008/07/29 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
nodejs 如何手动实现服务器
2018/08/20 NodeJs
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
win7安装python生成随机数代码分享
2013/12/27 Python
Python中字符串的处理技巧分享
2016/09/17 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
python实现批量命名照片
2020/06/18 Python
python/golang 删除链表中的元素
2020/09/14 Python
Python扫描端口的实现
2021/01/25 Python
促销活动方案模板
2014/02/24 职场文书
铅球加油稿100字
2014/09/26 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
详解Python牛顿插值法
2021/05/11 Python
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript