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


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 相关文章推荐
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
jQuery1.6 正式版发布并提供下载
May 05 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
Javascript中的getUTCDay()方法使用详解
Jun 10 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
Jun 25 Javascript
利用js实现前后台传送Json的示例代码
Mar 29 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 Javascript
javascrpt密码强度校验函数详解
Mar 18 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 动态执行带有参数的类方法
2009/04/10 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
理解python中生成器用法
2017/12/20 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
python xpath获取页面注释的方法
2019/01/14 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
中国好声音华少广告词
2014/03/17 职场文书
设计顾问服务计划书
2014/05/04 职场文书
土地转让协议书
2014/09/27 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
安全保证书怎么写
2015/02/28 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
党支部季度考核意见
2015/06/02 职场文书
学习心得体会
2019/06/20 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书