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


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 相关文章推荐
jQuery表单验证插件formValidator(改进版)
Feb 03 Javascript
js发送短信倒计时的简单实现方法
Sep 08 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
JavaScript事件处理程序详解
Sep 19 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 Javascript
JavaScript定时器常见用法实例分析
Nov 15 Javascript
ElementUI 修改默认样式的几种办法(小结)
Jul 29 Javascript
javascript读取本地文件和目录方法详解
Aug 06 Javascript
JavaScript 实现轮播图特效的示例
Nov 05 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
example1.php
2006/10/09 PHP
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
Python 加密的实例详解
2017/10/09 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python函数的万能参数传参详解
2019/07/26 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
建筑工程专业学生的自我评价
2013/12/25 职场文书
基层工作经历证明
2014/01/13 职场文书
护士辞职信范文
2014/01/19 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL