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


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中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
Jquery index()方法 获取相应元素索引值
Oct 12 Javascript
jQuery的Ajax的自动完成功能控件简要说明
Feb 22 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
jquery阻止后续事件只执行第一个事件
Jul 24 Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 Javascript
javascript运动详解
Jul 06 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
如何提高Dom访问速度
Jan 05 Javascript
Angular6封装http请求的步骤详解
Aug 13 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
Vue实现简易计算器
Feb 25 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面象对象数据库操作类实例
2014/12/02 PHP
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
再谈JavaScript线程
2015/07/10 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
Scrapy框架使用的基本知识
2018/10/21 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
会计自荐书
2013/12/02 职场文书
员工培训邀请函
2014/02/02 职场文书
建筑工地大门标语
2014/06/18 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
技术员岗位职责
2015/02/04 职场文书
环卫处个人工作总结
2015/03/04 职场文书
南极大冒险观后感
2015/06/05 职场文书
企业愿景口号
2015/12/25 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL