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


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 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
DWZ table的原生分页浅谈
Mar 01 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
May 04 Javascript
javascript中的正则表达式使用详解
Aug 30 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
javascript实现查找数组中最大值方法汇总
Feb 13 Javascript
真正好用的js验证上传文件大小的简单方法
Oct 27 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
Aug 16 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
es6数值的扩展方法
Mar 11 Javascript
JavaScript面向对象中接口实现方法详解
Jul 24 Javascript
JS+CSS实现过渡特效
Jan 02 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中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python中列表和元组的区别
2017/12/18 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
基于pandas中expand的作用详解
2019/12/17 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
python 5个顶级异步框架推荐
2020/09/09 Python
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
采购部主管岗位职责
2014/01/01 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
自查自纠工作总结
2014/10/15 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android