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


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 相关文章推荐
nicejforms——美化表单不用愁
Feb 20 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
Sep 30 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
深入学习jQuery Validate表单验证(二)
Jan 18 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
VUE中v-model和v-for指令详解
Jun 23 Javascript
Vue利用canvas实现移动端手写板的方法
May 03 Javascript
webpack4的迁移的使用方法
May 25 Javascript
JS实现水平遍历和嵌套递归操作示例
Aug 15 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
解析php常用image图像函数集
2013/06/24 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
python中遍历文件的3个方法
2014/09/02 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Python any()函数的使用方法
2019/10/28 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
表彰会主持词
2014/03/26 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
使用Python开发冰球小游戏
2022/04/30 Python