微信小程序自定义底部弹出框功能


Posted in Javascript onNovember 18, 2020

本文实例为大家分享了微信小程序自定义底部弹出框的具体代码,供大家参考,具体内容如下

实现这么一个功能,点击选项进行选择,效果是从底部弹出选项框(带滑出动画),选择了某项或者点击其他地方,隐藏(带滑出动画)。效果图如下:

可适用于任何场景,如普通选项(如图)或者类似商城小程序选择商品属性的弹出框。只需要把内容替换自己需要的即可。

微信小程序自定义底部弹出框功能

1. wxml代码

<view class="wrap">
 <view bindtap="showModal">
 <text>{{value}}</text>
 <icon class="arrow"></icon>
 </view>
 
 <!-- modal -->
 <view class="modal modal-bottom-dialog" hidden="{{hideFlag}}">
 <view class="modal-cancel" bindtap="hideModal"></view>
 <view class="bottom-dialog-body bottom-positon" animation="{{animationData}}">
  <!-- -->
  <view class='Mselect'>
  <view wx:for="{{optionList}}" wx:key="unique" data-value='{{item}}' bindtap='getOption'>
   {{item}}
  </view>
  </view>
  <view></view>
  <view class='Mcancel' bindtap='mCancel'>
  <text>取消</text>
  </view>
 
 </view>
 </view>
 
</view>

modal中,蓝色框框起来的,可按需替换。

微信小程序自定义底部弹出框功能

2. wxss代码

.arrow{
 display:inline-block;
 border:6px solid transparent;
 border-top-color:#000;
 margin-left:8px;
 position:relative;
 top:6rpx;
}
/* ---------------------------- */
/*模态框*/
.modal{position:fixed; top:0; right:0; bottom:0; left:0; z-index:1000;}
.modal-cancel{position:absolute; z-index:2000; top:0; right:0; bottom: 0; left:0; background:rgba(0,0,0,0.3);}
.bottom-dialog-body{width:100%; position:absolute; z-index:3000; bottom:0; left:0;background:#dfdede;}
/*动画前初始位置*/
.bottom-positon{-webkit-transform:translateY(100%);transform:translateY(100%);}
 
 
/* 底部弹出框 */
.bottom-positon{
 text-align: center;
}
.Mselect{
 margin-bottom: 20rpx;
}
.Mselect view{
 padding: 26rpx 0;
 background: #fff;
}
.Mselect view:not(:last-of-type){
 border-bottom: 1px solid #dfdede;
}
.Mcancel{
 background: #fff;
 padding: 26rpx 0;
}

如果项目中,多个页面使用了同样效果弹出框,如下的代码可以放到公共样式文件app.wxss中。

微信小程序自定义底部弹出框功能

3. js代码

Page({
 
 /**
 * 页面的初始数据
 */
 data: {
 optionList:['所有','选项1','选项2'],
 value:'所有',
 
 hideFlag: true,//true-隐藏 false-显示
 animationData: {},//
 },
 // 点击选项
 getOption:function(e){
 var that = this;
 that.setData({
  value:e.currentTarget.dataset.value,
  hideFlag: true
 })
 },
 //取消
 mCancel: function () {
 var that = this;
 that.hideModal();
 },
 
 // ----------------------------------------------------------------------modal
 // 显示遮罩层
 showModal: function () {
 var that = this;
 that.setData({
  hideFlag: false
 })
 // 创建动画实例
 var animation = wx.createAnimation({
  duration: 400,//动画的持续时间
  timingFunction: 'ease',//动画的效果 默认值是linear->匀速,ease->动画以低速开始,然后加快,在结束前变慢
 })
 this.animation = animation; //将animation变量赋值给当前动画
 var time1 = setTimeout(function () {
  that.slideIn();//调用动画--滑入
  clearTimeout(time1);
  time1 = null;
 }, 100)
 },
 
 // 隐藏遮罩层
 hideModal: function () {
 var that = this;
 var animation = wx.createAnimation({
  duration: 400,//动画的持续时间 默认400ms
  timingFunction: 'ease',//动画的效果 默认值是linear
 })
 this.animation = animation
 that.slideDown();//调用动画--滑出
 var time1 = setTimeout(function () {
  that.setData({
  hideFlag: true
  })
  clearTimeout(time1);
  time1 = null;
 }, 220)//先执行下滑动画,再隐藏模块
 
 },
 //动画 -- 滑入
 slideIn: function () {
 this.animation.translateY(0).step() // 在y轴偏移,然后用step()完成一个动画
 this.setData({
  //动画实例的export方法导出动画数据传递给组件的animation属性
  animationData: this.animation.export()
 })
 },
 //动画 -- 滑出
 slideDown: function () {
 this.animation.translateY(300).step()
 this.setData({
  animationData: this.animation.export(),
 })
 },
 
})

如上,用“// ------------------------------------------modal”隔开的以下的代码可不需要动。

如果一个页面中使用了两个同样效果的弹出框,只需要稍微修改一下就行了,这里就不贴出来。

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
HTML DOM的nodeType值介绍
Mar 31 Javascript
JavaScript初学者应注意的七个细节详细介绍
Dec 27 Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 Javascript
Jquery解析Json格式数据过程代码
Oct 17 Javascript
EasyUI创建对话框的两种方式
Aug 23 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
Jan 19 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
封装一下vue中的axios示例代码详解
Feb 16 Javascript
vue+ts下对axios的封装实现
Feb 18 Javascript
Vue axios 跨域请求无法带上cookie的解决
Sep 08 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 Javascript
微信小程序实现底部弹出框
Nov 18 #Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 18 #Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 #Vue.js
基于Cesium绘制抛物弧线
Nov 18 #Javascript
vue3.0实现点击切换验证码(组件)及校验
Nov 18 #Vue.js
js实现简易计算器小功能
Nov 18 #Javascript
微信小程序实现购物车功能
Nov 18 #Javascript
You might like
PHP flock 文件锁详细介绍
2012/12/29 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
在linux中使用包管理器安装node.js
2015/03/13 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
python代码制作configure文件示例
2014/07/28 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
重构Python代码的六个实例
2020/11/25 Python
学年自我鉴定范文
2013/10/01 职场文书
毕业生个人求职的自我评价
2013/10/28 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
Python中re模块的元字符使用小结
2022/04/07 Python